急啊!bcb中如何使用8字节长度的变量
数组a[512]存放了一扇区的数据
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
040007E00 46 49 4C 45 30 00 03 00 94 21 80 01 00 00 00 00
040007E10 01 00 01 00 38 00 01 00 98 01 00 00 00 04 00 00
040007E20 00 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00
040007E30 04 00 00 00 00 00 00 00 10 00 00 00 60 00 00 00
040007E40 00 00 18 00 00 00 00 00 48 00 00 00 18 00 00 00
040007E50 3E C1 13 E6 11 B3 C7 01 3E C1 13 E6 11 B3 C7 01
040007E60 3E C1 13 E6 11 B3 C7 01 3E C1 13 E6 11 B3 C7 01
040007E70 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
040007E80 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00
040007E90 00 00 00 00 00 00 00 00 30 00 00 00 68 00 00 00
040007EA0 00 00 18 00 00 00 03 00 4A 00 00 00 18 00 01 00
040007EB0 05 00 00 00 00 00 05 00 3E C1 13 E6 11 B3 C7 01
040007EC0 3E C1 13 E6 11 B3 C7 01 3E C1 13 E6 11 B3 C7 01
040007ED0 3E C1 13 E6 11 B3 C7 01 00 40 00 00 00 00 00 00
040007EE0 00 40 00 00 00 00 00 00 06 00 00 00 00 00 00 00
040007EF0 04 03 24 00 4D 00 46 00 54 00 00 00 00 00 00 00
040007F00 80 00 00 00 48 00 00 00 01 00 40 00 00 00 01 00
040007F10 00 00 00 00 00 00 00 00 0B 00 00 00 00 00 00 00
040007F20 40 00 00 00 00 00 00 00 00 C0 00 00 00 00 00 00
040007F30 00 C0 00 00 00 00 00 00 00 C0 00 00 00 00 00 00
040007F40 31 0C 00 00 04 00 01 00 B0 00 00 00 48 00 00 00
040007F50 01 00 40 00 00 00 05 00 00 00 00 00 00 00 00 00
040007F60 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
040007F70 00 10 00 00 00 00 00 00 08 00 00 00 00 00 00 00
040007F80 08 00 00 00 00 00 00 00 31 01 FF FF 03 00 00 00
040007F90 FF FF FF FF 00 00 00 00 00 80 00 00 00 00 00 00
040007FA0 00 80 00 00 00 00 00 00 31 08 00 00 04 00 01 00
040007FB0 B0 00 00 00 48 00 00 00 01 00 40 00 00 00 05 00
040007FC0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
040007FD0 40 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00
040007FE0 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
040007FF0 31 01 FF FF 03 00 00 00 FF FF FF FF 00 00 04 00
如果使用4字节长度的变量
unsigned long store_4=a[8];//4B
if(store_4==0x01802194)
ShowMessage( "bingo_4 "); //结果bingo_4
ShowMessage(store_4);//结果为十六制数01 80 21 94 的十进制值(94 21 80 01的高低为自动调过来了)
这个是AnsiString 的作用,但AnsiString为4B
我现在使用8字节长度的变量
unsigned __int64 store_8
unsigned __int64 store_8=a[8];//8B
if(__int64 store_8==0x0000000001802194)
ShowMessage( "bingo_8 "); //结果没有bingo_8,为什么呢
ShowMessage(store_8); //结果为十六制数94的十进制值,为什么呢
如何获得0x0000000001802194呢
------解决方案--------------------
楼主没有给出关键变量 a 的数据类型,不过应该看得出 a 是单字节类型的数组。
实际上用 unsigned long 应该也不会得到 0x01802194,不知道为什么楼主会得到这样的结果。
要得到想要的结果代码应该用指针进行转换:
unsigned __int64 store_8 = *(__int64*)&a[8];
[解决办法]
不明白楼主的意思,如果是为了显示成HEX型数值,可以用sprintf:
char buff[20];
memset(buff,0x00,sizeof(buff));
sprintf(buff, "%x ",store_8);
showmessage(buff);