質問

ここでは、おそらく私が見落としていることですが、なぜそれが起こっているのか理解できません...

私が抱えている問題は、ビットコンバーターを使用して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です。

なぜこれが起こっているのか、そしてこれを修正する方法を誰かが知っているでしょうか?

役に立ちましたか?

解決

0xa388は負のint16であるため、int32に変換されると 拡張サイン 同様の値のネガティブINT。あなたが見る0xffffは、サインエクステンション( '1'ビット付きのパディング)です。 UINT16およびUINT32を使用する方が適切です。

他のヒント

0xffffa388はint16ではありません。 32ビットタイプにキャストしていないのですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top