16 バイトの符号なし整数を変換するには、.NET でバイナリ ストリームを解析する必要があります。BinaryReader.ReadUIntXX() 関数を使用したいのですが、利用できる BinaryReader.ReadUInt128() 関数がありません。ReadByte 関数を使用して独自の関数をロールし、配列を作成する必要があると思いますが、これが最も効率的な方法かどうかはわかりません。ありがとう!
3 に答える
私はこれを信用したいのですが、ネットとビオラを簡単に検索します。
http://msdn.microsoft.com/en-us/library/bb384066.aspx
これがコードサンプルです(同じページにあります)
byte[] bytes = { 0, 0, 0, 25 };
// If the system architecture is little-endian (that is, little end first),
// reverse the byte array.
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
int i = BitConverter.ToInt32(bytes, 0);
Console.WriteLine("int: {0}", i);
// Output: int: 25
ほとんどの開発者が知らない唯一のことは、ビッグエンディアンとリトルエンディアンの違いです。人生のほとんどのものと同じように、人類は非常に単純なことに同意することはできません(左利きの車と右利きの車も良い例です)。ビット(1と0および2進演算を思い出してください)が配置されると、ビットの順序によってフィールドの値が決まります。1バイトは8番目のビットです。次に、符号付きと符号なしがあります。ただし、順序に固執します。数字の1(1)は、10000000または00000001の2つの方法のいずれかで表すことができます(詳細な説明については、コメントの説明を参照してください)-コードのコメントが示すように、ビッグエンディアンは前に1つあるものです。 -エンディアンはゼロの場合です。(http://en.wikipedia.org/wiki/Endiannessを参照してください-申し訳ありませんが、新しいユーザーです。ハイパーリンクを2回以上許可しません。...
私は何年も前に組み込みシステムを扱っているときにこのレッスンを学びました....リンクを覚えていますか?:)私は私の年齢を示していますか?
0xA3、SLaks、および Darin Dimitrov からのコメントが質問に答えたと思いますが、すべてをまとめる必要があります。BinaryReader.ReadUInt128() は、.NET のバイナリ リーダー クラスではサポートされていません。私が見つけた唯一の解決策は、独自の関数を作成することでした。0xA3 で述べたように、.NET 4.0 には BigInt データ型があります。皆さんのコメントに基づいて、独自の関数を作成中です。ありがとう!
guidのサイズは正確に16バイトです。
Guid guid = new Guid(byteArray);
ただし、GUIDを使用して数学を行うことはできません。必要に応じて、インターネット上で.net用のBigIntegerのいくつかの実装を検索できます。次に、bytearrayをBigIntegerに変換できます。