以7个字节压缩8个字符

时间:2013-03-27 12:16:15

标签: c++

我有一个包含八个字符的std :: string和一个下拉控件的索引值(int)。我只有8个字节来存储所有数据。

是否可以将8个字符压缩为7个字节,以便为索引值节省第8个字节?

2 个答案:

答案 0 :(得分:5)

unsigned long long pack(const std::string& s, unsigned index)
{
    return (s[0] & 127)
         | (s[1] & 127) << 7
         | (s[2] & 127) << 14
         | (s[3] & 127) << 21
         | (s[4] & 127) << 28
         | (s[5] & 127) << 35
         | (s[6] & 127) << 42
         | (s[7] & 127) << 49
         |     index    << 56;
}

答案 1 :(得分:3)

是的,假设您的字符只接受标准ASCII字符集中的值。

如果这个假设是正确的,那么它们只取值0-127(即7位值)。所以你只有8 * 7位的信息。并且你有7 * 8位来存储它。所以只需删除每个字符的MSB,然后打包它们。

<小时/> 然而,这似乎只是为了保存单个字节而做的大量工作。你真的需要这样做吗?