C++ 位串到字节

标签 c++ bit-manipulation bitstring

对于一项作业,我正在 Visual Studio 中对霍夫曼算法进行压缩/解压缩。在我得到 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 个字节被推送,我会多次得到相同的字节。我不熟悉位操作,并要求有人带我完成这个或完成一个工作功能。

最佳答案

使用 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;
}

关于C++ 位串到字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26656878/

相关文章:

c++ - std::map 基类指针

c++ - 主区域 : "master region may not be closely nested inside of work-sharing or explicit task region" 的 OpenMP for 循环

c++ - g++ "does not name a type"错误

python字节到位串

c++ - MySQL 和数据库查询 : sorting

java - 使用位移位反转数字

c - C语言中有没有可以存储按位运算结果的变量类型?

python - Ascii 字节串打包成位图/位串回到字符串?

elixir - Elixir 中 BitString 的位计数或汉明权重?

c - 你如何使用 C 确定数字的二进制表示中是否有偶数 1?