0

ここで問題が発生しましたが、それはおそらく見落としているだけですが、なぜそれが起こっているのか理解できません...

私が抱えている問題は、ビットコンバーターを使用して2バイト配列からInt16を取得していることですが、何らかの理由でこれを行うたびに、取得する必要がある数値を取得し、0xFFFFを番号の先頭。

例...

byte[] ourArray = { 0x88, 0xA3, 0x67, 0x3D };
Int16 CreationDate = BitConverter.ToInt16(new byte[] {ourArray[2], ourArray[3]} , 0);
Int16 CreationTime = BitConverter.ToInt16(new byte[] {ourArray[0], ourArray[1]}, 0);

これは、「CreationDate」が 0x3d67 (正しい) で返されますが、CreationTime は 0xffffa388 です。

なぜこれが起こっているのか、これを修正する方法を知っている人はいますか?

4

2 に答える 2

2

0xA388 は負の Int16 であるため、Int32 に変換すると、同様の値を持つ符号拡張された負の int が得られます。表示される 0xFFFF は符号拡張 (「1」ビットでパディング) です。UInt16 と UInt32 を使用することをお勧めします。

于 2010-11-08T04:48:31.813 に答える
0

0xffffa388 は Int16 ではありません。32ビット型にキャストしていませんか?

于 2010-11-08T04:46:21.327 に答える