PDA

View Full Version : سوال: خواندن HEX از آرایه



regbyte
شنبه 22 آبان 1389, 19:49 عصر
سلام
من یک سری مقادیر HEX را در:
char buffer[100];
ذخیره کردم، حالا برای خوندن این مقادیر یه مشکلی دارم
مقادیر: ... 45 0B
X=(int)buffer[0]
برای خواندن یک کلمه (2 بایت) چکار باید بکنم؟ یعنی مثلا 2 بایت مثال فوق را 2885 برگرداند؟

mehdi.mousavi
یک شنبه 23 آبان 1389, 10:46 صبح
سلام من یک سری مقادیر HEX را ذخیره کردم، حالا برای خوندن این مقادیر یه مشکلی دارم برای خواندن یک کلمه (2 بایت) چکار باید بکنم؟ یعنی مثلا 2 بایت مثال فوق را 2885 برگرداند؟

سلام.
می تونید به این شکل عمل کنید:


BYTE ch[100] = {NULL};
ch[0] = 0x45;
ch[1] = 0x0b;

WORD w = MAKEWORD(ch[0], ch[1]);


موفق باشید.

پاورقی: MAKEWORD در فایل WinDef.h بصورت زیر تعریف شده:

#define MAKEWORD(a, b) ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8))

regbyte
دوشنبه 24 آبان 1389, 10:30 صبح
ممنون، یه مشکل اینه که:

char a=0xC0;
cout<<(int) a;
// -64

C0 در این مثال که Hex هست و معادل 192، چرا -64 بر می گردونه؟
(256-192)
1. چه Cast ی باید انجام بدم که 192 رو برگردونه؟
2. چه جوری می تونم اونو به باینری تبدیل کنم و تک تک بیت هاش رو داشته باشم؟
با تشکر

mehdi.mousavi
دوشنبه 24 آبان 1389, 10:47 صبح
ممنون، یه مشکل اینه که:

char a=0xC0;
cout<<(int) a;
// -64

C0 در این مثال که Hex هست و معادل 192، چرا -64 بر می گردونه؟
(256-192)
1. چه Cast ی باید انجام بدم که 192 رو برگردونه؟
2. چه جوری می تونم اونو به باینری تبدیل کنم و تک تک بیت هاش رو داشته باشم؟
با تشکر




سلام.
ببخشید، من کد پست قبل رو تغییر دادم. جای CHAR باید بنویسید BYTE چون CHAR مقادیر 0-127 رو شامل میشه اما BYTE مقادیر 0-255. بنابراین:

BYTE a=0xC0;
cout<<(int) a;

صحیح هستش.

در مورد سوال دوم نیز لطفا به این آدرس (http://groups.engin.umd.umich.edu/CIS/course.des/cis400/cpp/binary.html) رجوع کنید.

موفق باشید.

regbyte
دوشنبه 24 آبان 1389, 11:40 صبح
بابت قسمت دوم خیلی ممنون اما قسمت اول اگر char باشه چه جوری می تونم cast کنم که عدد منفی برنگردونه؟
با تشکر

mehdi.mousavi
دوشنبه 24 آبان 1389, 16:11 عصر
اگر char باشه چه جوری می تونم cast کنم که عدد منفی برنگردونه؟
با تشکر

سلام.
ابتدا برام توضیح بدید که هدفتون از اینکار چی هستش و سپس بفرمایید، بطور مثال وقتی عدد 192 رو در CHAR ریختید، انتظار دارید اون CHAR حاوی چه عددی باشه؟

موفق باشید.

regbyte
سه شنبه 25 آبان 1389, 14:46 عصر
متشکرم
با unsigned char حل شد.

mehdi.mousavi
سه شنبه 25 آبان 1389, 14:57 عصر
متشکرم
با unsigned char حل شد.

خوب BYTE هم همون unsigned char هستش دیگه: :لبخندساده:

typedef unsigned char BYTE;

موفق باشید.