1

私はすぐにカスタム整数型を表す大量のメモリを扱っており、これを移植可能に保つと、常に同じ操作になります。ある種のカスタム Integer クラスを構築することを考えていますが、そのようなものが既に存在するかどうか疑問に思っていましたか? たとえば、次のようなものをサポートするには:

char * buffer_ptr = //....
UInteger<5> d( buffer_ptr, E_Type_BigEndian );
d = 20;
uint64 e = 1234567890;
d += e

結果は、代入をサポートする BigEndian の 5 バイト/40 ビットの符号なし整数のメモリ表現であり、標準のホスト順序タイプでの操作も可能です。

または、ブーストまたは何かがそれを支援しますか?

どうもありがとうございました!

4

1 に答える 1

2

「X ビット」(または「X バイト」) の整数をサポートして、1 バイト演算を使用し、これを行うために上位バイトまたは下位バイトから開始するだけで、数学演算の完全な補数をサポートすることはそれほど難しくありません。

ただし、ある程度のパフォーマンスが必要な場合は、そうしたくないでしょう。

私は、任意のビット数の整数に対して本質的にこれを行うプロジェクトに取り組みました。ただし、数学演算 (例: int3 x = 2; x += 5; ...) で妥当なパフォーマンスを達成するために、32 ビット整数 (32 ビットより大きい場合は 64 ビット int) を使用してすべての単純な数学演算を実行しました。 、そして最後にのみ、変数自体から値が転送されるときに、余分なビットがマスクされます。これにより、使用する操作とシーケンスに応じて、ほぼ確実に計算パフォーマンスが 10 ~ 100 倍向上します。

ビッグ/リトル エンディアンについても、内部表現にネイティブ形式を使用し、転送時に変換するだけです (ただし、それが「通常の」変換かどうかはわかりませんが、「

 Uinteger<3> a(..., E_Type_BigEndian);
 a = 0x12345678
 uint64 b = a;

確かbに含むべきではありません0x78563412;か?

于 2013-05-30T13:37:39.150 に答える