我有一个包含八个字符的 std::string 和一个下拉控件的索引值 (int)。我只有 8 个字节来存储所有数据。
是否可以将 8 个字符压缩为 7 个字节,以便为索引值保留第 8 个字节?
我有一个包含八个字符的 std::string 和一个下拉控件的索引值 (int)。我只有 8 个字节来存储所有数据。
是否可以将 8 个字符压缩为 7 个字节,以便为索引值保留第 8 个字节?
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;
}
是的,假设您的字符仅采用标准 ASCII 字符集中的值。
如果这个假设是正确的,那么它们只取值 0-127(即 7 位值)。所以你只有 8 * 7 位的信息。你有 7 * 8 位来存储它。所以只需去掉每个字符的 MSB,然后打包它们。