我有一个包含八个字符的std :: string和一个下拉控件的索引值(int)。我只有8个字节来存储所有数据。
是否可以将8个字符压缩为7个字节,以便为索引值节省第8个字节?
答案 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,然后打包它们。
<小时/> 然而,这似乎只是为了保存单个字节而做的大量工作。你真的需要这样做吗?