所以我有一个填充了字节的缓冲区,我知道它应该至少有16个字节长。 我不关心字节0 - 11。 我知道从12到15的4个字节代表32位数字。
如何提取这些字节并将它们表示为32位数字。
答案 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位整数;主机字节顺序(大或小端)。由于您可以控制缓冲区,因此可以根据需要放置参数。