3

Int32 値を 3 バイト (24 ビット) の整数に変換する必要があります。エンディアンはそのまま(少し)ですが、符号を適切に移動する方法がわかりません。値は既に適切な範囲に制限されています。4 バイトを 3 に変換する方法がわかりません。C# 4.0 を使用します。これはハードウェアの統合のためなので、24 ビットの値が必要で、32 ビットは使用できません。

4

2 に答える 2

3

これを見つけました: http://bytes.com/topic/c-sharp/answers/238589-int-byte

int myInt = 800;
byte[] myByteArray = System.BitConverter.GetBytes(myInt);

配列の最後の 3 つの要素を取得するだけでよいようです。

編集:

ジェレミアが指摘したように、次のようなことをする必要があります

int myInt = 800;
byte[] myByteArray = System.BitConverter.GetBytes(myInt);

if (BitConverter.IsLittleEndian) {
    // get the first 3 elements
} else {
    // get the last 3 elements
}
于 2011-02-07T06:20:42.833 に答える
3

その変換を行いたい場合は、4 バイトの数値の上位バイトを削除するだけです。2 の補数表現は符号を正しく処理します。Int32変数に24 ビットの数値を保持したい場合は、 を使用v & 0xFFFFFFして下位 24 ビットのみを取得できます。バイト配列に関するあなたのコメントを見ました。配列にスペースがある場合は、数値の 4 バイトすべてを書き込み、最初の 3 バイトだけを送信してください。ただし、これはリトルエンディアン システムに固有のものです。

于 2011-02-07T06:19:07.560 に答える