-3

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

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

4

2 回答 2

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;
}
于 2013-03-27T13:27:28.417 回答
3

是的,假设您的字符仅采用标准 ASCII 字符集中的值。

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


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

于 2013-03-27T12:18:25.433 回答