-3

8文字のstd::stringとドロップダウンコントロールのインデックス値(int)があります。すべてのデータを格納するのに8バイトしかありません。

インデックス値のために8バイトを節約するために、8文字を7バイトに圧縮することは可能ですか?

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を取り除き、それらをパックします。


ただし、これは1バイトを節約するためだけに非常に多くの作業を行うように思われます。あなたは本当にこれをする必要がありますか?

于 2013-03-27T12:18:25.433 に答える