现在我可以将数组 ( char*data
) 中的 4 个字节(已知起始位置,非 0)复制到 aDWORD
吗?
这有两个部分:首先,从指定位置的数组中获取 4 个字节(4 个元素,每个元素是一个 char,在 C 中是 1 个字节),然后将它们移动到一个 DWORD。
我也不知道该怎么做。
谢谢!
您可以使用memcpy
(它需要string.h
标题):
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
int main(void)
{
uint8_t array[] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09
}
uint32_t dword;
size_t offset = 2;
memcpy(&dword, array + offset, sizeof(dword));
printf("Dword value = 0x%08x\n", dword);
return 0;
}
我认为下面的代码应该工作
memcpy(destination, input+offset, howMany);
您要寻找的是反序列化。char *
在这种情况下,如果您的数据是大端(从最高字节开始)或小端(从最低字节开始),则必须指定某处。对于便携式应用程序,BE 可能是最受欢迎的。
完成此操作后,您的功能可能如下所示
uintmax_t readarrayvalue_be(const char * data, uint8_t bytes)
{
uintmax_t value = 0;
while (bytes) {
value <<= 8;
value |= *(data++) & 0xFF;
bytes--;
}
return value;
}
而在具体情况下,它可能会被重组为
uint32_t readarrayvalue_u32_be(const char * data)
{
uint32_t value = ((data[0] & 0xFF) << 24) | ((data[1] & 0xFF) << 16) | ((data[2] & 0xFF) << 8) | (data[3] & 0xFF);
return value;
}