分类: WINDOWS
2011-03-08 14:56:14
LONGLONG llvalue=100i64
typedef union _LARGE_INTEGER{
struct {
ULONG LowPart; //低32位的整数
LONG HighPart; //高32位的整数
}
struct {
ULONG LowPart;//低32位的整数
LONG HighPart;//高32位的整数
} u;
LONGLONG QuadPart;
}LARGE_INTEGER;
如果你的编译器内置支持64位整型,使用QuadPart成员来存储64位整型数值。否则, 使用LowPar和HighPart成员来存储64位整型数值
将这个64位的整数赋值为100
1) Little endian
LARGE_INTEGER LargeValue;
LargeValue.LowPart=100;
LargeValue.HighPart=0;
2) Big endian
LARGE_INTEGER LargeValue;
LargeValue.u.LowPart=100;
LargeValue.u.HighPart=0;
3) LARGE_INTEGER LargeValue;
LargeValue. QuadPart =100i64;
我们知道一个基本存储单元可以保存一个字节,每个存储单元对应一个地址。对于大于十进制255(16进制0xff)的整数,需要多个存储单元。例如,4660对应于0x1234,需要两个字节。不同的计算机系统使用不同的方法保存这两个字节。在我们常用的PC机中,低位的字节0x34保存在低地址的存储单元,高位的字节0x12保存在高地址的存储单元;而在Sun工作站中,情况恰恰相反,0x34位于高地址的存储单元,0x12位于低地址的存储单元。前一种就被称为Little Endian,后一种就是Big Endian。
如果我们将0x1234abcd(高位字节12)写入到以0x0000开始的内存中,则结果为
big-endian little-endian
0x0000 0x12 0xcd
0x0001 0x34 0xab
0x0002 0xab 0x34
0x0003 0xcd 0x12