Aha*_*ron 2 registry timestamp typeconverter visual-c++
我有一个指向字节的指针,它实际上指向 4 个字节的数组(由 RegQueryValueEx 创建)。
我想将这 4 个字节转换为一个 DWORD。
虽然它看起来很简单并且肯定有一种现有的方法可以做到,但我没有成功找到它。
或者:注册的值是一个时间戳。有没有一种方法可以将表示 TimeStamp 的 4 字节数组转换为字符串?
您问的是如何获取一个包含四个字节的数组并将其转换为 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);
}
Run Code Online (Sandbox Code Playgroud)
这假设您的整数是以小端存储的。这意味着首先存储最低有效字节,因此如果您有一个字 0x1234,它将以两个字节 0x34、0x12 的顺序存储在内存中。
在 big-endian 中,数字 0x1234 将作为 0x12、0x34 存储在内存中。如果这就是你想要的,那么只需反转数组索引,即从b[3]到b[0]。
陷阱警告:
以下代码是完全合法的 C 语言,即编译时不会出错:
char c[4];
int x = *((int *)c);
Run Code Online (Sandbox Code Playgroud)
但是,这基本上是通过将 a 转换char *为 anint *并取消引用它来工作的。这被认为是非常糟糕的做法,因为它引入了以下可移植性问题:  
int是 32 位,那么如果目标系统需要,编译器必须保证对齐。Achar[4]不能保证对齐到 4 个字节。