所以基本上我正在构建一个霍夫曼编码。我已经有一张用于存储该字母及其相应表示的地图
地图声明为
map<char, string>
所以这意味着我有:
<'A', 101>
<'S', 000011>
<'G', 01>
...
现在,我需要编码一个字符串,例如'ASSGSSA',所以我转到地图并获取每个键的值。之后,我需要将1和0的序列(例如:1010000011 ...)写入二进制文件,但我不知道如何将每个字符串“转换”为位/字节表示。
请问您能解释如何从字符串转换为字节转换?如果序列的大小不是8,如何处理。
答案 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}};