如何将uint32_ts存储在uint8_ts数组中

时间:2015-08-05 09:37:58

标签: c++

我必须将一堆uint32_t值序列化为uint8_t s的数组。你如何以便携有效的方式做到这一点?

2 个答案:

答案 0 :(得分:1)

虽然可以通过uint32_t访问uint8_tcstdint(标准C),但无法保证它们确实存在。 C标准说它们应该是如果它们的位数。例如,它们可能在36位和其他奇数平台上丢失。

除此之外,它只是通过算术转换的问题:

hi = (x >> 24) & 0xFF;
ji = (x >> 16) & 0xFF;
ko = (x >> 8) & 0xFF;
lo = (x >> 0) & 0xFF;

和相反的方式相反:

x = (hi << 24ul) | (ji << 16ul) | (ko << 8ul) | (lo << 0ul);

答案 1 :(得分:1)

操作原始字节数组的可移植方法是std::memcpychar个缓冲区。

uint32_t toBeSent = 42;
char buffer[sizeof toBeSent];

std::memcpy(&buffer, &toBeSent, sizeof toBeSent);
sendBuffer(buffer);

// ...

uint32_t toBeReceived;
char buffer[sizeof toBeReceived];

receiveBuffer(buffer);
std::memcpy(&toBeReceived, &buffer, sizeof toBeReceived);