PDA

View Full Version : تبدیل از Hex به Byte



saeed_rezaei
چهارشنبه 22 اسفند 1386, 18:28 عصر
سلام دوستان
من میخوام یک مقدار کاراکتری رو به مقدار هگز و سپس مقدار هگز رو به مقداری از نوع بایت تبدیل کنم.
با استفاده از کد


dim Mychar as Char
...
Hex ( ASC (MYCHAR))


تونستم که مقادیر رو به هگز تبدیل کنم. حالا میخوام بدونم چطور مقدار به دست اومده رو به نوع داده بایت تبدیل کنم.

مرسی از وقتتون

amirsajjadi
چهارشنبه 22 اسفند 1386, 21:40 عصر
با سلام
این کد برای تبدیل HEX به Decimal


Val("&H" & Hex(125))

این کد هم برای تبدیل Decimal به Binary

PublicFunction Dec_to_Binary(ByVal num AsLong) AsString
Dim a, b AsObject
Dim s AsString = ""
Do
a = num \ 2
b = num Mod 2
num = a
s += Trim(Str(b))
LoopUntil (num < 1)
Return StrReverse(s)
EndFunction

saeed_rezaei
چهارشنبه 22 اسفند 1386, 23:09 عصر
سلام امیر جان
با تشکر از وقتی که گذاشتی.
من میخوام یه آرایه حجیم از اطلاعات رو که به صورت رشته هست رو ابتدا هگز کنم و بعد به صورت بایت در بیارم.
در این بین کوچیک بودن حجم اطلاع من خیلی مهمه.
در کدی که شما پیشنهاد دادید، ابتدا باید هر هگز رو دسیمال کنم که در این صورت همون اول هگز نمی کنم ، مستقیم دسیمال می زنم.
از طرفی تابع تبدیلتون، یک عدد رو که حجم کمی میگیره رو به یک رشته از صفر و یکها تبدیل می کنه که شامل هشت کاراکتر هست. خوب اینجوری که حجم ذخیره سازی اطلاعات بالا می ره.
من می تونم با کد:



dim c as char
dim b as byte
dim s as string

s=hex (asc (c))
b= convert.tobyte (s)



عملیات تبدیل هگز به بایت رو انجام بدم. اما همانطور که درخط سوم میبیند، تابع hex خروجیش string هست. برای کاراکترهای مثل z مقدار 7a رو می ده. چون از نوع رشته هست پس در دو بایت نگهداری می شه. حالا توی خط آخر، چطور می شه که دو بایت رو در یک بایت جا داد.

من دنبال راهی می گردم که بتونم هگز رو توی یک بایت یعنی هشت بیت جا بدم. نه اینکه رشته ای بشه. مهم اینه که حجم ذخیره سازی پایین بیاد.

بازهم تشکر می کنم ازجوابتون و منتظر سایر پیشنهادات شما و سایر دوستان هستم.

Reza_Shamayel
پنج شنبه 23 اسفند 1386, 09:09 صبح
با سلام خدمت همگی

دوست عزیز، به نظر بنده اصلا نیازی نیست که شما داده از نوع char رو به Hex و سپس به Byte تبدیل کنید! به لحاظ مفهومی داده از نوع Char وقتیکه بصورت کد اسکی (Asc) نگاه کرده بشه، فقط یک بایت حجم داره. شما فقط کافیه که کار زیر رو انجام بدید

Dim C As Char
Dim B As Byte
B = Convert.ToByte(C)

موفق باشید.

Reza_Shamayel
پنج شنبه 23 اسفند 1386, 09:11 صبح
Dim C As Char
Dim B As Byte
B = Convert.ToByte(C)

saeed_rezaei
پنج شنبه 23 اسفند 1386, 16:09 عصر
ممنونم دوست عزیز.
بله درسته. خود char در یک بایت نگهداری می شه. اما من می خوام تبدیل شده اون رو در بایت نگهداری کنم.

linux
پنج شنبه 23 اسفند 1386, 16:53 عصر
ممنونم دوست عزیز.
بله درسته. خود char در یک بایت نگهداری می شه. اما من می خوام تبدیل شده اون رو در بایت نگهداری کنم.
تبدیل شده به چی؟
شما در درک مفاهیم دچار سردرگمی هستید.
یک بایت یعنی هشت تا بیت که از 0000 0000 شروع میشه تا 1111 1111 که در مبنای 16 از 0 میشه تا FF در مبنای 10 هم میشه از 0 تا 255.
در اینجا اگر نگاه کنی http://en.wikipedia.org/wiki/ASCII جدول کدها ascii را می توانی ببینی.
مثلا برای حرف A برابر 65 در مبنای 10 ، 41 در مبنای 16 و 01000001 در مبنای 2 هست.
اگر دنبای فشرده سازی اطلاعات هستید کلاس مناسبی برای این کار در .net هست.
اگر دنبال کد کردن اطلاعات هستید برای آن هم کلاس مناسبی هست.