【问题标题】:c++ bitstring to bytec++ 位串转字节
【发布时间】:2014-10-30 15:19:32
【问题描述】:

对于一项作业,我正在 Visual Studio 中对 Huffman 算法进行压缩/解压缩。在我得到 8 位(例如10101010)后,我想将它转换为一个字节。这是我的代码:

    unsigned byte = 0;
    string stringof8 = "11100011";
    for (unsigned b = 0; b != 8; b++){
        if (b < stringof8.length())
            byte |= (stringof8[b] & 1) << b;
    }
    outf.put(byte);

前几个位串被正确输出为一个字节,但如果我有超过 3 个字节被推送,我会多次获得相同的字节。我不熟悉位操作,并要求有人带我完成这个或完成一个工作功能。

【问题讨论】:

  • 你为什么 |= 1 = stringof8.length()?
  • 什么是stringof8
  • 你的 stringof8 是一串代表二进制位的 ascii 字符吗?如果是这样,那么 ascii "1" 通过先减去 ascii "0" 转换为数字 1,然后您可以进行位操作。
  • 向我们展示 stringof8 的声明。
  • 例如,string stringof8 = "11100011" 我想将它等于的字节输出到输出文件中

标签: c++ bit-manipulation bitstring


【解决方案1】:

使用 std::bitset

#include <iostream>
#include <string>
#include <bitset>


int main() {

    std::string bit_string = "10101010";
    std::bitset<8> b(bit_string);       // [1,0,1,0,1,0,1,0]
    unsigned char c = ( b.to_ulong() & 0xFF);
    std::cout << static_cast<int>(c); // prints 170

    return 0;
}

【讨论】:

  • @AB_ 谢谢你的代码!能够正确输出字节
  • @AB_ 我想知道。使用 bitset 输出文件上的字节后,您可以读取无符号长字节并重新转换为字符串吗?我试图玩来回转换,但无法使用 std::bitset 获得正确的 bitstr 甚至前 8 位字符串
  • 从文件中读取字符串并调用std::bitset b(bit_string);,调用b.to_ulong()
猜你喜欢
  • 1970-01-01
  • 2014-04-15
  • 2014-11-03
  • 1970-01-01
  • 2018-07-16
  • 2019-12-15
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多