0

ハードウェアから16ビットの符号付き数値が入っています。にカーストしたいInt32

としてキャストすると、short負の数の場合に動作することがあります。ただし、ほとんどの場合、first chance exception of type 'System.OverflowException' occurred

これが私のコードです:

int M1;
M1 = (short)(INBuffer[3] << 8) + INBuffer[2];

C#で16ビットのshortを32ビットの整数にキャストするにはどうすればよいですか?

4

1 に答える 1

2

がバイト配列であると仮定するINBufferと、安全に a にキャストできますが、 a にはキャストできushortませんshort。これは、上位バイトの最上位ビットが 1 の場合、ビットシフトされると値が符号付き短整数型には大きすぎるためです。

あなたの場合、 が必要な場合intは、キャストする必要はまったくありません-ビットシフトは を出力し、 を再度int追加するとが残ります-すでにそこにいます...byteint

于 2012-05-01T12:42:33.013 に答える