【问题标题】:Convert a char array of 0 and 1 to bytes in C++在 C++ 中将 0 和 1 的 char 数组转换为字节
【发布时间】:2015-03-18 13:53:30
【问题描述】:

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

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

谁能引导我找到如何转换这个字符数组的解决方案?

【问题讨论】:

  • C - Convert char to int 的可能重复项
  • 只是出于兴趣:您是否有特殊原因,首先不使用std::bitset

标签: c++ arrays char byte


【解决方案1】:

您需要将数组分成 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 作为值,但这种方式最简单,您可能应该从它开始并首先使其工作。

【讨论】:

  • 感谢您的回复。我已经将您的代码用于我的代码的一小部分,它完成了我迄今为止希望它做的事情。再次感谢您。
  • @Keygori ,如果答案帮助您解决了问题,请不要忘记将答案标记为已接受的答案(答案旁边的勾号)。
【解决方案2】:

也许是这样的?

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

【讨论】:

    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    相关资源
    最近更新 更多