首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

急bcb中怎么使用8字节长度的变量

2012-03-20 
急啊!bcb中如何使用8字节长度的变量数组a[512]存放了一扇区的数据Offset0123456789ABCDEF040007E0046494C4

急啊!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);

热点排行