0

现在我可以将数组 ( char*data) 中的 4 个字节(已知起始位置,非 0)复制到 aDWORD吗?

这有两个部分:首先,从指定位置的数组中获取 4 个字节(4 个元素,每个元素是一个 char,在 C 中是 1 个字节),然后将它们移动到一个 DWORD。

我也不知道该怎么做。

谢谢!

4

3 回答 3

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;
 }
于 2014-01-03T09:40:51.730 回答
1

我认为下面的代码应该工作

memcpy(destination, input+offset, howMany);
于 2014-01-03T09:24:00.013 回答
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;
}
于 2014-01-03T13:53:25.550 回答