用C++将0和1的字符数组转换为字节

Convert a char array of 0 and 1 to bytes in C++

本文关键字:数组 字符 转换 字节 C++      更新时间:2023-10-16

我有一个问题。这对你来说可能听起来微不足道,但对我来说却不是,因为我在C++中几乎还是个小人物。(也很抱歉我的英语知识有限)

假设我有一个char a[72]数组。这个数组充满了代表位(a[0] = '0'a[1] = '1'a[2] = '1'等)的'0''1',我需要将其保存为二进制文件,因此当我尝试使用xxd-b查看这个文件时,我希望看到这9个字节在数组中的样子。

有人能告诉我如何转换这个字符数组的解决方案吗?

您需要将数组分成8个符号的组,并将每组符号从二进制字符串表示转换为无符号字符。例如:

unsigned char byte = 0;
for( int i = 0; i < 8; ++i )
    if( a[i] == '1' ) byte |= 1 << (7-i);

然后将这些字节放入另一个大小为72/8的数组中,并将其存储到文件中,例如通过std::ostream::write()方法。您可以按16、32或64位对位进行分组,并使用uint16_tuint32_tuint64_t作为值,但这种方法最简单,您可能应该从它开始,并首先使其工作。

也许是这样的?

const std::size_t n = 72;
std::vector<char> byteArray(n / 8);
for (std::size_t i = 0; i < n / 8; ++i)
    for (std::size_t j = 0; j < 8; ++j)
        if (a[i * 8 + j] == '1')
            byteArray[i] |= 1 << j;

然后用operator[]()data()访问byteArray