用C++将0和1的字符数组转换为字节
Convert a char array of 0 and 1 to bytes in C++
我有一个问题。这对你来说可能听起来微不足道,但对我来说却不是,因为我在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_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
。
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 按字符值访问int数组
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 移动二维数组中的字符
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- C++ 带结构的数组字符
- 数组字符包含量超出预期
- 读取文件并添加到数组字符
- 如何在Qt中更改或替换数组字符
- 为什么编译器不在参数中传递数组字符 *arr[] 的大小?
- 井字棋数组字符错误
- 分割数组字符