Next: C++ Interface Internals, Previous: Float Internals, Up: Internals [Index]
mpz_out_raw
は次のようなフォーマットを使います。
+--------+------------------------+ | サイズ | データバイト列 | +--------+------------------------+
最初の「サイズ」部は4バイトの大きさで,その後ろに「データバイト列」が続きます。サイズ部が2の補数で表現された負数の時は,負の整数という意味になります。データバイト列の部分は整数の絶対値で,最大桁にあたる部分がデータバイト列の先頭に来ることになります。
最大桁にあたるデータバイト列は常に非ゼロとなりますので,リムサイズと無関係に,どんな計算機システム上でも同じ出力結果となります。
GMP Version 1では,リムサイズ分だけゼロとなるバイト値を詰め込んでいました。mpz_inp_raw
でも互換性のため,そのようにしています。
サイズ部分とデータバイト列を「ビッグエンディアン」として表現するのは慎重にお願いします。というのも,16進ダンプファイルとして読み取る分にはいいのですが,リムの並びは逆から読み書きしなければなりません。ということで,ビッグエンディアン環境でもリトルエンディアン環境でも,_mp_d
だけを読み書きすることはできません。