字符串到位C ++

时间:2015-05-02 23:27:59

标签: c++ binary byte

所以基本上我正在构建一个霍夫曼编码。我已经有一张用于存储该字母及其相应表示的地图

地图声明为

map<char, string>

所以这意味着我有:

<'A', 101>
<'S', 000011>
<'G', 01> 
...

现在,我需要编码一个字符串,例如'ASSGSSA',所以我转到地图并获取每个键的值。之后,我需要将1和0的序列(例如:1010000011 ...)写入二进制文件,但我不知道如何将每个字符串“转换”为位/字节表示。

请问您能解释如何从字符串转换为字节转换?如果序列的大小不是8,如何处理。

1 个答案:

答案 0 :(得分:0)

您应该尝试将字符映射到整数类型,而不是将字符映射到字符串,例如unsigned char

static_assert(sizeof(unsigned char) == 1, "unsigned char is not 1 byte on this platform");
using byte = unsigned char;

#include <map>

using huffman_map_t = std::map<char, byte>;
huffman_map_t theMap = {{'A', 0x05},
                        {'S', 0x03},
                        ...
                        {'G', 0x01}};

在已实现二进制整数文字的编译器中,您可以更接近于在代码中表示二进制值。我也投入了数字分隔符,使模式更清晰。请参阅Binary literals?,特别是@ sasha.sochka的答案

huffman_map_t theMap = {{'A', 0b00000101},
                        {'S', 0b00000011},
                        ...
                        {'G', 0b00000001}};