在C ++中将char数组0和1转换为字节

时间:2015-03-18 13:53:31

标签: c++ arrays char byte

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

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

可以请任何人带我到解决方案如何转换这个char数组?

2 个答案:

答案 0 :(得分:0)

您需要以8个符号为一组拆分数组,并将每个组从二进制字符串表示转换为unsigned char。例如:

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作为值,但这种方式最简单,您可能应该从它开始并使其工作第一

答案 1 :(得分:0)

也许是这样的?

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;

然后使用byteArrayoperator[]()访问data()

相关问题