我有一个指向byte的指针,它实际指向4个字节的数组(由RegQueryValueEx创建)。
我想将这4个字节转换成一个DWORD
虽然看起来很简单,但肯定有现成的方法,但我没有成功找到它。
或者:注册值为TimeStamp。有没有一种方法可以将4字节数组转换为表示TimeStamp的字符串?
答案 0 :(得分:3)
您正在询问如何获取四个字节的数组并将其转换为32位值,对吧?它实际上非常简单(假设您认为按位运算符很简单):
typedef unsigned int dword;
typedef unsigned char byte;
//Convert an array of four bytes into a 32-bit integer.
dword getDwordFromBytes(byte *b)
{
return (b[0]) | (b[1] << 8) | (b[2] << 16) | (b[3] << 24);
}
这假设您的整数存储为little-endian。这意味着首先存储最低有效字节,因此如果你有一个字0x1234,它将按顺序存储在内存中,作为两个字节0x34,0x12。
在big-endian中,数字0x1234将作为0x12,0x34存储在内存中。如果这是您想要的,那么只需反转数组索引,即从b[3]
转到b[0]
。
陷阱警告:
以下代码完全合法C,即它将编译没有错误:
char c[4];
int x = *((int *)c);
但是,这主要通过将char *
转换为int *
并取消引用它来实现。这被认为是非常糟糕的做法,因为它引入了以下可移植性问题:
int
是32位,那么编译器必须保证在目标系统需要时进行对齐。 char[4]
不能保证与4个字节对齐。答案 1 :(得分:1)
查看MAKEWORD MAKELONG宏。