PDA

View Full Version : مبتدی: اضافه کردن چند بیت به فایل باینری



mr-adler
دوشنبه 23 آبان 1390, 16:28 عصر
سلام
نمیدونم عنوان رو درست نوشتم یا نه ... !
من میخوام به فایل رو به صورت باینری باز کنم و در وسطای فایل چند بیت اضافه یا کم کنم . چیکار باید کرد؟؟؟
مثلا فرض کنیم یه فایل 5 بیتی داریم . میخوام بکنمش 8 بیت به طوری که 3 بیت اضافه شده بعد از دومین بیت فایلم قرار بگیره.
نمیدونم واضح و درست گفتم یا نه امیدوارم منظورمو متوجه شده باشید:لبخندساده:
باز کردن فایل به صورت باینری هم که به صورت زیر است:

Open "d:\red.exe" For Binary As #1

راستی یه سوال مبتدیانه:لبخند:
میشه گفت تمام فایل های موجود در سیستم از نوع باینری هستند؟:خجالت:

متشکرم:قلب:

mr-adler
سه شنبه 24 آبان 1390, 21:04 عصر
سلام کسی نیست راهنمایی کنه؟
برای شروع کار به راهنماییتون لازم دارم .
یه چیزایی متوجه شدم و اونم اینه که به اعداد در مبنای 2 و 10 نام هایی دادن .ولی در کل این چند روز که گشتم مباحث مطرح شده برام یکم سخت بودن و راستشو بخواهید چیز زیادی متوجه نشدم....

به هر حال ممنونم....:لبخندساده:

kitcat_m18
سه شنبه 24 آبان 1390, 22:28 عصر
ببين اين به دردت مي خوره

Seek #1 , 9
Put #1, 9, "Barnamenevis.ORG"

mr-adler
چهارشنبه 25 آبان 1390, 00:59 صبح
ممنونم که جواب دادید...

Open "d:\war.txt" For Binary As #1
Put #1, 1, "ops"
Close #1
کد های بالا رو نوشتم اما به محتویات درون تکست رشته مورد نظر رو اضافه کرد.
با یه فایل exe امتحان کردم بعد از اضافه کردن رشته دیگه باز نشد . نمیدونم چه اتفاقی افتاد..
به هر حال هیچ اطلاعات قبلی محکمی ندارم . اگه میشه یه کم توضیح بدید....:لبخندساده:

M.T.P
چهارشنبه 25 آبان 1390, 01:52 صبح
تو ته فایل بنویسید ، فکر نکنم مشکلی پیش بیاد. :متفکر:

mr-adler
چهارشنبه 25 آبان 1390, 01:59 صبح
ممنونم(اما هنوز نخوندینش:لبخند:)
اصلا من متوجه نمیشم با اضافه کردن یک رشته به یک فایل exe چیکار داریم میکنیم!مگه هر بیت یک عدد بین 0 تا 255 نیست.من در بالا یک رشته از نوع کلمه وارد کردم اشکالی نداشت ؟ ایا نوشتن(اضافه کردن) بیت به فایل همینه؟ چطور اضافه شده ها رو کم کنیم؟با دستور put & get فقط میشه خوند و قرار داد....
(و خیلی سوالات دیگه .... !):خجالت::لبخند:

ASedJavad
چهارشنبه 25 آبان 1390, 08:56 صبح
سلام



فرض کنیم یه فایل 5 بیتی داریم . میخوام بکنمش 8 بیت به طوری که 3 بیت اضافه شده بعد از دومین بیت فایلم قرار بگیره.


منظورت از بیت همون بایته دیگه؟
اگه منظورت همون بایته، باید بگم که میتونی توضیحات زیر رو بخونی، اگه هم نه که بگو تا برات توضیحات جدید بدم (اگه بخوای با بیتها کار کنی (نه با بایتها) به یه سری محاسبات در مبنای دو نیاز داری.)

میشه گفت تمام فایل های موجود در سیستم از نوع باینری هستند؟نمیدونم منظورت از این سوال چیه!
این باینری که ما تو vb ازش استفاده میکنیم نوع رجوع به فایله نه خود فایل.
یعنی ما به ویبی میگیم فایل رو طوری برامون باز کنه که ما رو بایت بایت برنامه کنترل داشته باشیم
حالا ما میتونیم بسته به نوع کارمون همون فایل رو بصورت inputT و ... باز کنیم




Open "d:\war.txt" For Binary As #1
Put #1, 1, "ops"
Close #1
کد های بالا رو نوشتم اما به محتویات درون تکست رشته مورد نظر رو اضافه کرد.
اون کدی که شما نوشتی، رشته مورد نظر رو به محتویات فایلتون اضافه نکرد. بلکه سه بایت اول فایل رو به رشته مورد نظر تغییر داده.


با یه فایل exe امتحان کردم بعد از اضافه کردن رشته دیگه باز نشد . نمیدونم چه اتفاقی افتاد.خب مسلمه! وقتی شما میای چند بایت از یه فایل رو همین طوری و غیرحساب شده عوض میکنی، دیگه اون فایل کار قبلیش رو نمیتونه انجام بده.
اصلا کسایی که فایلهاشون رو کد میکنن تا برا کسی قابل استفاده نباشه، مگه چکار میکنن؟
میان یه سری بایت از فایلشون رو طبق قاعده ای که خودشون میدونن، تغییر میدن. دیگه اون فایل غیر قابل استفاده میشه.
و وقتی دوباره میخوان اون فایل رو تو برنامه استفاده کنن، میان اون بایتهای تغییر داده شده رو دوباره میکنن مثل اولش.



اصلا من متوجه نمیشم با اضافه کردن یک رشته به یک فایل exe چیکار داریم میکنیم!مگه هر بیت یک عدد بین 0 تا 255 نیست.
نه!
هر بیت یه عدد بین 0 تا 255 نیست.
هر بیت در حقیقت یه عدد بین صفر تا یکه. و هر بایت از هشت بیت تشکیل میشه که میشه بین 0 تا 255.


ایا نوشتن(اضافه کردن) بیت به فایل همینه؟ ... با دستور put & get فقط میشه خوند و قرار داد....
اگه شما بیای اینجوری به انتهای فایل اضافه کنی ، بله ! اضافه کردن بایت (نه بیت) به فایل همینه. ولی اگه بخوای به ابتدا یا وسط فایل اضافه کنی، نه اینجوری نیست.
مثلا فرض کن شما میخوای بعد از بایت سوم فایلت (بین بایت سوم و چهارم) رشته x رو اضافه کنی. برای اینکار میتونی یه فایل جدید باز کنی،سه بایت اول فایلت رو بریزی تو فایل جدید، بعد رشته X رو بریزی توش، بعد سایر محتویات فایل اصلی رو هم انتقال بدی به فایل جدید بعد از رشته x و سپس فایل اولی رو پاک کنی و فایل جدید رو به نام اون، تغییر نام بدی.
البته با این کار لزومی نداره یه فایل exe ‌هنوز بتونه اجرا بشه.


چطور اضافه شده ها رو کم کنیمفکر کنم دیگه فهمیده باشی!
باز یه فایل جدید باز میکنی، اون قسمتایی که میخوای از فایل قدیم انتقال میدی به فایل جدید. و ادامه ماجرا
البته راههای دیگه ای هم هست که به نظر من این راه اگر چه سرعتش کمتره ولی مطمئن تره.


(و خیلی سوالات دیگه .... !)ما در خدمتیم!

mr-adler
چهارشنبه 25 آبان 1390, 15:30 عصر
اقا جواد عالی بود واقعا . ممنونم (خیلی زیاد)....:قلب::قلب:
فقط شرمنده بازم سوالات هست:خجالت:(سوالات پایه ایم تموم بشه میرم دنبالش با مثال و سورس تلاش میکنم یاد بگیرم...):لبخندساده:
1.میشه بایتی ایجاد شده باشه و مقدارش تهی باشه؟یعنی مثلا مقدار داخلش "" باشه؟
2.
(اگه بخوای با بیتها کار کنی (نه با بایتها) به یه سری محاسبات در مبنای دو نیاز داری.)
اگه ممکنه یه توضیح کوچیک بدید یعنی چی؟
3.من هنوز متوجه نشدم چطور هر بایت که عددی هست بین 0 تا 255 چطوری ممکنه یه رشته رو تو خودش قبول کنه؟مثلا بایت پنجم عدد 76 است . حالا چطور میشه گفت ما حرف z رو ریختیم تو این بایت؟(معنیش چیه؟)
4.
برای اینکار میتونی یه فایل جدید باز کنی،سه بایت اول فایلت رو بریزی تو فایل جدید
چطوری؟:خجالت:
5.چطور با کد نویسی متوجه بشم به انتهای بایت های برنامه رسیدم؟
6.چطور این بایت ها در کنار هم معنا پیدا میکنند؟ ایا الگوریتم خاصی داره یا نه.

شرمنده خیلی زیاد شد اما اگه مفهومش رو درک کنم کار باهاش برام خیلی اسون تر میشه.در ضمن لازم نیست همشو جواب بدید هر چند تا رو که خواستید جواب بدید.
راستی:

میشه گفت تمام فایل های موجود در سیستم از نوع باینری هستند؟
این جمله رو به این شکل تغییر میدم:
میشه گفت تمام فایل های موجود در سیستم رو میشه از نوع باینری باز کرد.( ----> فکر کنم بهتر شد:لبخند::چشمک:)

کمک بزرگی بهم کردید ممنونم:لبخندساده:

ASedJavad
چهارشنبه 25 آبان 1390, 17:12 عصر
قابل نداشت عزیز
وظیفه است دیگه
همون قضیه زکات و علم و این جور چیزا!
اما جواب سوالات:
1- آره. چرا نشه
البته تهی نمیتونه باشه (اگه تهی رو به معنی هیچی و عدم بگیریم) ولی میتونه مقدارش صفر باشه که به عبارتی معادل تهی بودنه.
2-این سوالو اگه میتونستم بفهمم چکاره ای و تحصیلاتت چیه و این جور چیزا شاید راحتتر میشد جواب بدم
ولی در حالت کلی اینه که
صد در صد شنیدی به دنیای کامپیوتر میگن دنیای صفر و یک
نمیدونم میدونی چرا یا نه؟
چون اساس کامپیوتر از بیتها تشکیل شده و هر بیت یا مقدار صفر داره یا یک.
یعنی شما میتونی مثلا هارد کامپیوتر رو یه صفحه در نظر بگیری که روش کلی چراغ نصبه که این چراغا یا خاموشن (معادل صفر) یا روشن (معادل یک)
(البته احتمالا اینو میدونستی ولی چون سطح تحصیلاتتو نمیدونستم، گفتم که مطلب کامل باشه )
خب حالا چون کار کردن با صفر و یک برا ما سخته، اومدن هر هشت بیت رو یه بایت در نظر گرفتن که کمترین مقداری که میگیره 00000000 یا همون صفر خودمون و بیشترینش 11111111 یا همون 255 خودمونه.
اینه که هر بایت مقدارش بین صفر تا 255 هست
و اینه که اگه شما بخوای دقیقا با این صفر و یکا کار کنی، یا بایتهای هشت بیتی بکارت نیومد و خواستی مثلا از بایتهای 13 بیتی استفاده کنی (که خیلی به ندرت پیش میاد) نیاز به محاسبات دودویی (در مبنای دو) داری.
3- حتما تا حالا شده بخوای یه لیستی رو بنویسی.
مثلا لیست اعضای یه کلاس رو
خب طبیعتا برا اینکار میای به هر اسمی یه شماره اختصاص میدی و سری بعد بجای اسم طرف، شمارشو میگی.
یا مثل مسابقات تلویزیونی که بجای اینکه بگن آقای فلانی، میگن آقای شماره 2 و ...

خب طراحای کامپیوتر تصمیم گرفتن با رشته های متنی کار کنن
رو همین حساب اومدن برا هر کاراکتر یه عدد در نظر گرفتن
اول تعداد این کاراکترا 127 بود معادل یک بایت علامت دار بعد شد 255 معادل یک بایت بدون علامت (منظور از بایت علامتدار و بدون علامت اینه که تو ممکنه تو بایت ذخیره شده)آخرین بیت رو جزو شمارش حساب نکنن و اگه یک بود بگن مقدار بایتمون منفیه و اگه صفر بود بگن مثبته)
بعد هم شد 64هزار و خورده ای معادل دوبایت.
طبق فرض 255 کاراکتری، هر بایت دقیقا معادل یک کاراکتره (که البته این کاراکتر ممکنه غیر قابل نمایش یاشه مثل کاراکتر تهی یا همن صفر یا کاراکتر backSpace‌یا کاراکترهای دیگه)
که به این عدد هر کاراکتر تو سیستم 255 تایی، کد اسکی (ascii) میگن و تو سیستم 64هزار تایی کد یونی کد و ...
برا اینکه مقدار هر کاراکتر رو بدست بیاری میتونی از تابع Asc(YourCharacter)
استفاده کنی وبرعکس این کار با تابع Chr$(yourNumber) انجام میشه

4- بذار اول سوال 5 رو جواب بدم
5-خب وقتی فایلت رو باز کردی (با همون دستور open که خودت بلد بودی)
میتونی با دستور LOF(yourFileNumber) طول فایلت یا همون تعداد بایت اون رو بفهمی
4-مثلا با این کد که فقط بزا آشناییت گذاشتم ولی بهتر از این هم میشه نوشت:



Private Sub Form_Load()
Dim x As String * 60000
Dim i As Long
Open "c:\1.txt" For Binary As #1
Open "c:\2.txt" For Binary As #2
Get #1, 1, x
Put #2, 1, Mid$(x, 1, 3)
Put #2, 4, "asd"
For i = 4 To LOF(1) Step 60000
Get #1, i, x
Put #2, i + 3, x
Next
Close
FileCopy "c:\2.txt", "c:\1.txt"
Kill "c:\2.txt"
End Sub


6- الگوریتمش بسته به نوع فایلش فرق میکنه و بیشتر به مباحث ساختار فایل مربوط میشه
مثلا اگه فایلت تکست معمولی باشه،
از همون اول هر بایت، یه کارکتر معمولیه
یا مثلا اگه فایلت تصویری باشه هر سه بایت معادل رنگ یه نقطه میشه یا ...
که من تو این زمینه ها هیچ تخصصی ندارم.

7- بله. هر فایلی رو که بشه باز کرد، میشه از نوع باینری باز کرد.

سوال دیگه ای هم بود باز درخدمتم

Mr'Jamshidy
چهارشنبه 25 آبان 1390, 17:19 عصر
اقا جواد عالی بود واقعا . ممنونم (خیلی زیاد)....:قلب::قلب:
فقط شرمنده بازم سوالات هست:خجالت:(سوالات پایه ایم تموم بشه میرم دنبالش با مثال و سورس تلاش میکنم یاد بگیرم...):لبخندساده:
1.میشه بایتی ایجاد شده باشه و مقدارش تهی باشه؟یعنی مثلا مقدار داخلش "" باشه؟
2.
اگه ممکنه یه توضیح کوچیک بدید یعنی چی؟
3.من هنوز متوجه نشدم چطور هر بایت که عددی هست بین 0 تا 255 چطوری ممکنه یه رشته رو تو خودش قبول کنه؟مثلا بایت پنجم عدد 76 است . حالا چطور میشه گفت ما حرف z رو ریختیم تو این بایت؟(معنیش چیه؟)
4.
چطوری؟:خجالت:
5.چطور با کد نویسی متوجه بشم به انتهای بایت های برنامه رسیدم؟
6.چطور این بایت ها در کنار هم معنا پیدا میکنند؟ ایا الگوریتم خاصی داره یا نه.

شرمنده خیلی زیاد شد اما اگه مفهومش رو درک کنم کار باهاش برام خیلی اسون تر میشه.در ضمن لازم نیست همشو جواب بدید هر چند تا رو که خواستید جواب بدید.
راستی:

این جمله رو به این شکل تغییر میدم:
میشه گفت تمام فایل های موجود در سیستم رو میشه از نوع باینری باز کرد.( ----> فکر کنم بهتر شد:لبخند::چشمک:)

کمک بزرگی بهم کردید ممنونم:لبخندساده:

در مورد سوال اولت باید بگم هر عدد مشخصه یک کاراکتر بخصوص هست مثلا 65 مشخصه کاراکتر A هست و 97 مشخصه کاراکتر a
این مشخصه ها رو استلاحا کد اسکای میگن

برای این منظور 2 تا تابع در ویبی گنجونده شده که یکی کد اسکای رو میگیره و کاراکتر بر میگردونه و دومی کاراکتر میگیره و کد اسکای بر میگردونه

تابع کاراکتر به کد اسکای
Asc(Char)
تابع کد اسکای به کاراکتر
Chr(Asc Code)
--------------------------------------------
با تابه EOF مخفف End Of File که مقدار بازگشتی تابع True یا False هست میتونی متوجه بشی که به آخر فایل رسیدی یا نه
---------------------
معنا پیدا کردن بایت ها کنار هم به پردازشگر سیستم شما بر میگرده CPU

CPU مثل آدم ها میمونه مثلا یکی بلده فارسی حرف بزنه یکی ترکی و ...

CPU ها هم هرکدوم برای خودشون زبون خاصی دارن

مثلا در CPU های AMD کد 01000111 صفحه نمایش رو پاک میکنه (مثلا ها)
و CPU های Intel کد 00001100 همین کار رو انجام میده و استفاده هرکدوم تو اون یکی CPU دیگه باعث بروز خطا میشه

اگر شما میخوای معنی بایت ها رو یاد بگیری بی خیال VB شو برو زبان ماشینی یاد بگیر
------------------
نمیشه گفت که همه بایناری هستن (البته کاملا نمیشه گفت) اما بله میشه همه نوع فایل رو بصورت بایناری باز کرد

فایل های بایناری روشون کنترل کامل داری مثلا اگر کد اسکای 198 رو تو تکست باکس بزنی اگر کاراکتری نداشته باشه تبدیل میشه به علامت سوال
بخاطر همینه که اگر یک فایل اجرایی رو تو تکست باکس باز کنی و بدون تغییر در جای دیگه ذخیره کنی دیگه اون فایل کار نمیکنه

درواقع میشه گفت کاراکتر های ناخوانا در حالت String تغییر پیدا میکنن اما در حالت Binary چون عدد هستن همون چیزی که هستن میمونن و تغییر نمیکنن

mr-adler
دوشنبه 30 آبان 1390, 19:36 عصر
سلام
ببخشید که بازم مزاحم شدم . از اون موقع در گیر همین موضوع هستم . عمدتا یاد گرفتم خدا رو شکر فقط بعضی قسمتهاش مونده:

اول تعداد این کاراکترا 127 بود معادل یک بایت علامت دار بعد شد 255 معادل یک بایت بدون علامت (منظور از بایت علامتدار و بدون علامت اینه که تو ممکنه تو بایت ذخیره شده)آخرین بیت رو جزو شمارش حساب نکنن و اگه یک بود بگن مقدار بایتمون منفیه و اگه صفر بود بگن مثبته)
بعد هم شد 64هزار و خورده ای معادل دوبایت.
طبق فرض 255 کاراکتری، هر بایت دقیقا معادل یک کاراکتره (که البته این کاراکتر ممکنه غیر قابل نمایش یاشه مثل کاراکتر تهی یا همن صفر یا کاراکتر backSpace‌یا کاراکترهای دیگه)
که به این عدد هر کاراکتر تو سیستم 255 تایی، کد اسکی (ascii) میگن و تو سیستم 64هزار تایی کد یونی کد و ...از قسمت بالا این رو متوجه نشدم:

و تو سیستم 64هزار تایی کد یونی کد و ...بزارید یکم توضیح بدم:
با کنار هم قرار گرفتن 8 بیت یک بایت تشکیل میشه و چون مقدار هر بیت یا صفر هست و یا یک 256 حالت مختلف پیش میاد.(که چون حالات ما از صفر شروع میشه این تعداد میشه از 0 تا 255 )حالا مثلا مقدار بایت سوم ما از یک فایل 13 هست که میشه معادل دکمه enter .(کد اسکی)
از گفته های شما متوجه شدم یک نوع تقسیم بندی دیگه هم صورت گرفته که بیت اخر(یعنی سمت راستی؟؟؟) اگه صفر بود به اون بایت , بایت مثبت و اگه یک بود بهش بایت منفی میگن.

بعد هم شد 64هزار و خورده ای معادل دوبایت.حالا اینجا رو متوجه نمیشم یعنی چی؟ فقط اینو فهمیدم که چون از هر بایت یک بیت رو برداشتیم شد دو به توان 14 یعنی 16384 در حالی که قبل از محسوب نکردن این 2 بیت میشد 65536 .(این اعداد تعداد حالات ممکن هستند.در واقع تفاوت بین کد اسکی و یونیکد هست.)

حالا چی شد که یونی کد شد زبان ( یا کاراکتر) استاندارد هر فایل ؟ مگه همین روش چه اشکال یا ضعفی داشت؟

Get #1, 1, xعدد یک وسطی به کدام معناست؟
1.start
2.byte num
توضیح یک:یعنی این عدد مشخص میکنه که شروع خواندن بایت ها از بایت اول هست
توضیح دومی:صرفا شماره بایت مورد نظر هست.
که از توضیحاتتون میشه فهمید مورد اول صحیحه . ایا درست گفتم؟

For i = 4 To LOF(1) Step 60000این مورد یعنی چی؟چرا استپ رو برابر 60000 گرفتید؟

و مورد اخر که شاید اهمیتش بیشتر باشه اینه که:
فرض کنید که یه برنامه نوشتیم که توش فقط قراره عدد 50 را تو فرممون پرینت کنه.سوال من اینه که بعد از کمپایل کردن برنامه تو بایت های متعلق به اون چی نوشته میشه . مثلا مینویسه:

Print 50یعنی تو بایت اول مینویسه p بعدش r و ....
فکر نکنم اینطور باشه . قاعدش چیه؟ مسلما باید قاعده ای داشته باشه که برنامه های دیکمپایلر از روش میتونه سورس رو تولید کنه...:متفکر:

خب فقط همینا بود:لبخند::خجالت:

ASedJavad
سه شنبه 01 آذر 1390, 07:55 صبح
سلام


از قسمت بالا این رو متوجه نشدم:

و تو سیستم 64هزار تایی کد یونی کد و ...

خب طبیعتا منظورم همون 65536 بود.


فقط اینو فهمیدم که چون از هر بایت یک بیت رو برداشتیم شد دو به توان 14 یعنی 16384
وقتی میخوایم به عددمون دو بایت اختصاص بدیم، کافیه دو بایت رو پشت سر هم بذاریم و نتیجه میشه عددی بین 0 و 65536 .
خب حالا اگه بخوایم عددمون مقادیر منفی رو هم شامل بشه، نیازی نیست از هر بایت یک بیت رو برداریم. بلکه کلا یک بیت از دوبایت رو برمیدداریم و منفی و مثبت رو باهاش نشون میدیم. یعنی میشه عددی بین منفی 10 به توان 15 تا مثبت 10 به توان 15


حالا چی شد که یونی کد شد زبان ( یا کاراکتر) استاندارد هر فایل ؟ مگه همین روش چه اشکال یا ضعفی داشت؟
خب ما n تا زبون داریم تو دنیا. هر زبون هم n تا کاراکتر برا خودش داره. مثلا همین زبون فارسی خودمون: "آ ـآ ا ـا بـ ـبـ ـب ب پـ ..." یا مثلا شنیدم زبون چینی 300 کاراکتر مختلف داره.
حالا شما فرض کن تو یه فایل متنی با چند زبون مطلب نوشته شده.
خب مسلما اینجا 255 کاراکتر جواب نمیده.


عدد یک وسطی به کدام معناست؟
توضیح یک:یعنی این عدد مشخص میکنه که شروع خواندن بایت ها از بایت اول هست
توضیح دومی:صرفا شماره بایت مورد نظر هست.
که از توضیحاتتون میشه فهمید مورد اول صحیحه . ایا درست گفتم؟

کاملا درسته


این مورد یعنی چی؟چرا استپ رو برابر 60000 گرفتید؟
بخاطر اینکه x رو یه رشته 60000 کاراکتری معرفی کردم و با هر بار دستور get از بایت جاری تا 60000 بایت بعدی توش ریخته میشه.
ماکزیمم این عدد میتونه همون 65536 باشه (به نظرم)
البته بدیهیه اگه مثلا فایلتون فقط 30000 بایت داشته باشه، 30000 بایت دیگه x‌با کاراکتر شماره 0 پر میشن.


و مورد اخر که شاید اهمیتش بیشتر باشه اینه که:
من فکر میکنم یه سری دیگه هم توضیح دادم که این مباحث بر میگرده به ساختار فایل و این که من هیچ تخصصی در این مورد ندارم.
ولی فقط میتونم اینو بهت بگم:
احتمالا درمورد زبانهای سطح پایین و سطح بالا و سطح ماشین چیزایی خوندی یا شنیدی.
(اینی رو که میگم، بدون تخصص دارم میگم و ممکنه اشتباهاتی توش باشه)
تو زبون سطح ماشین هر بایت میتونه خودش یه دستور باشه
مثلا فرض کن بایت "01011100" (این بایت رو همین جوری دارم میگم) تو زبون ماشین معنیش این باشه که بایت بعدی رو رو فرم چاپ کن
حالا کامپایلر میاد زبون سطح بالای شما رو تبدیل میکنه به زبان ماشین و دستور print 50 رو میاد تو فایل اگزه به این صورت میذاره که مثلا تو بایت اول مقدار "01011100" و تو بایت بعد مقدار 50 رو میریزه.
یعنی دستور print 50 تو فایل اگزه تبدیل به دو بایت میشه.

mr-adler
جمعه 04 آذر 1390, 01:22 صبح
سلام
دوستان واقعا عالی بود . مچکرم. من که کمال استفاده رو بردم.
این پست رو زدم برای کسایی که کار با مبنا ها رو فراموش کردن یا مثل بازیگوش بودن تو مدرسه یاد نگرفتن:لبخند:
طریقه تبدیل مبنا ها (فعلا ده دهی(اگه اشتباه نکنم دسیمال) و باینری(دودوئی)):
78357
توضیحات کوتاه:
خب طبق توصویر ابتدا عدد 29 تبدیل شده به عدد 29 ! اما در مبنای 2 که شده 11101 .(تقسیمات متوالی بر 2)
بعدش هم روش تبدیل عدد در مبنای 2 به مبنای 10 گفته شده که به این صورته که عدد رو از سمت راست ضربدر 2 به توان شماره اون عدد میکنیم . (شماره اعداد مثل ارایه ها از صفر شروع میشه)
خب فکر کنم توضیحات کافی باشه . ایشالا در مورد شانزده شانزدهی و موارد استفادش هم باهاش بیشتر کار کردم مطلب میزارم.

جمیعا موفق باشیم:لبخند: .