我必须将一堆uint32_t
值序列化为uint8_t
s的数组。你如何以便携有效的方式做到这一点?
答案 0 :(得分:1)
虽然可以通过uint32_t
访问uint8_t
和cstdint
(标准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::memcpy
和char
个缓冲区。
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);