现在我可以将数组(char*data
)中的4个字节(已知起始位置,非0)复制到DWORD
吗?
这有两个部分:首先,从指定位置的数组中获取4个字节(4个元素,每个元素是C中1个字节的char),然后将它们移动到DWORD。
我不知道该怎么做。
谢谢!
答案 0 :(得分:1)
我认为下面的代码应该可行
memcpy(destination, input+offset, howMany);
答案 1 :(得分:1)
您可以使用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;
}
答案 2 :(得分:0)
您寻找的是反序列化。在这种情况下,如果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;
}