在 C++ 中将 0 和 1 的字符数组转换为字节
Convert a char array of 0 and 1 to bytes in C++
我有一个问题。这对你来说可能听起来微不足道,但对我来说却不是,因为我在 C++ 方面仍然是一个菜鸟。 (也很抱歉我的英语知识有限)
假设我有一个 char a[72]
数组。这个数组充满了 '0'
和 '1'
代表位(a[0] = '0'
、a[1] = '1'
、a[2] = '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_t
、uint32_t
或 uint64_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
。
我有一个问题。这对你来说可能听起来微不足道,但对我来说却不是,因为我在 C++ 方面仍然是一个菜鸟。 (也很抱歉我的英语知识有限)
假设我有一个 char a[72]
数组。这个数组充满了 '0'
和 '1'
代表位(a[0] = '0'
、a[1] = '1'
、a[2] = '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_t
、uint32_t
或 uint64_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
。