8文字のstd::stringとドロップダウンコントロールのインデックス値(int)があります。すべてのデータを格納するのに8バイトしかありません。
インデックス値のために8バイトを節約するために、8文字を7バイトに圧縮することは可能ですか?
8文字のstd::stringとドロップダウンコントロールのインデックス値(int)があります。すべてのデータを格納するのに8バイトしかありません。
インデックス値のために8バイトを節約するために、8文字を7バイトに圧縮することは可能ですか?
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を取り除き、それらをパックします。