从数组中提取字符为UINT32

时间:2014-12-10 17:42:42

标签: c arrays data-conversion

所以我有一个填充了字节的缓冲区,我知道它应该至少有16个字节长。 我不关心字节0 - 11。 我知道从12到15的4个字节代表32位数字。

如何提取这些字节并将它们表示为32位数字。

2 个答案:

答案 0 :(得分:1)

您可以将每个字节转换为8位无符号数,并且可以使用位操作将这些数字组合为一个32位数字:

uint32_t result = 0;

for (int i = 12; i < 16; i++) {
    result <<= 8;
    result |= (uint8_t)bytes[i];
}

答案 1 :(得分:0)

我对unions{}有一种固定,我无法帮助它。这可能会有所帮助:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <arpa/inet.h>

uint32_t
convert_int(char bytes[4])
{
        union {uint32_t n; char bytes[4];} box;

        memcpy(&box.bytes[0], bytes, sizeof(*bytes));
        return ntohl(box.n);
}

int
main(void)
{

        uint32_t number;

        number = convert_int("\x0A\x00\x00\x00");
        printf("%d\n", number);
        return 0;
}

convert_int()以网络字节顺序接受4个字节(Big endian)(最高有效字节优先)并将其转换为32位整数;主机字节顺序(大或小端)。由于您可以控制缓冲区,因此可以根据需要放置参数。