6

C#でushortを2バイト変数に分割するにはどうすればよいですか?

私は以下を試しました(package.FrameIDはushortです):

これを紙と鉛筆で計算しようとすると、正しい結果が得られます。また、FrameID が 1 バイトより大きい場合 (つまり、2 番目のバイトがゼロでない場合) は機能します。

array[0] = (byte)(0x0000000011111111 & package.FrameID);
array[1] = (byte)(package.FrameID >> 8);

私の場合、package.FrameID は 56 で、array[0] の結果は 56 ではなく 16 です。

どうすればこれを修正できますか?

4

2 に答える 2

18

BitConverterを使用する

var bytes = BitConverter.GetBytes(package.FrameID);
于 2013-09-03T08:39:42.280 に答える
10

0x0000000011111111は 2 進数ではなく、16 進数です。0x0ff代わりに使用する必要があります。

ただし、結果はバイトであり、バイトにキャストすると上位ビットが破棄されるため、実際には結果は必要ありませんand。これを行うことができます:

array[0] = (byte)package.FrameID;
array[1] = (byte)(package.FrameID >> 8);

(これは、コードを使用していないことを前提としていますchecked。使用している場合、255 より大きい値を a にキャストするbyteと例外が発生します。checkedコードを使用しているかどうかはわかります。)

于 2013-09-03T08:45:17.370 に答える