【发布时间】:2020-03-21 15:47:48
【问题描述】:
我有一个 uint8_t 数组,包含三个字节。
// 1010 1010 1011 1011 1000 0000
uint8_t command[3] = {0xAA, 0xBB, 0x80};
我现在想在左侧用 7 个零填充数组,最终创建以下数组(我不关心第 4 个字节):
// 0000 0001 0101 0101 0111 0111 0000 0000
uint8_t expected_output[4] = {0x01, 0x55, 0x77, 0x00};
在 C++ 中实现这种零填充的最佳方法是什么?
【问题讨论】:
-
看看std::bitset。
-
c is not c++ and c++ is not c,我去掉了标签
-
谢谢@Evg,我会看看文档。我只想要一种不依赖于小/大端架构的可靠方式。
-
如果字节序是一个问题,你到底想做什么?如果您仅在内部使用该数组,那么我会使用一个大的
uint32_t来代替。任何字节顺序问题都消失了。如果你需要通过网络传输,数组就可以了,你有四个单字节,所以字节序没有问题,你只需要按正确的顺序放置它们。如果你想为 both 使用值/数组,那么你有矛盾的要求,你 将 必须以某种方式处理字节序(htole32 或 ntohl 等函数把它藏起来……)。 -
A
uint8_t [4]将始终依赖字节序,因为它将始终存储来自 LS0x01, 0x55, 0x77, 0x00MS 的数据。这与 Big Endian 32 位数一致。但是,如果您希望它等于 32 位数字 0x01557700,那么它就不再一致并且不会在 Little Endian 机器上工作。
标签: c++ arrays embedded padding