C:DWORD数组的4个元素

时间:2014-01-03 09:15:51

标签: c arrays char dword

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

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

我不知道该怎么做。

谢谢!

3 个答案:

答案 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;
}