boost::multiprecision::uint128_t
128 ビット値に対してビット演算を実行するために型を使用していました。ただし、128 ビット値をバイナリ ファイルに書き出すのに問題があります。具体的には、値をゼロで埋める必要があります。
例として、uint128_t
値が0x123456
16進エディタでファイルを見ている場合、次のシーケンスが必要です。
56 34 12 00 00 00 00 00 00 00 00 00 00 00 00 00
#include <boost/multiprecision/cpp_int.hpp>
#include <fstream>
boost::multiprecision::uint128_t temp = 0x123456;
std::ofstream ofile("test.bin", std::ios::binary);
ofile.write((char*)&temp, 16);
ofile.close();
代わりに、バイナリ ファイルは次の値で終了します。
56 34 12 00 CC CC CC CC CC CC CC CC CC CC CC
テンプレートのブースト バックエンドがuint128_t
、128 ビットを 4 つの 32 ビット値として格納しているように見えます。また、使用中の 32 ビット値の数を示す「リム」値があります。32 ビット値が使用されていないときは、0xCCCCCCCC
. したがって、ofstream.write
は文字の配列を調べて を書き出し0xC
ます。
これを正しく書き出すためにブースト ライブラリに欠けているものはありますか?それとも、uint128_t
値を別のデータ型に変換する必要がありますか?