受け入れられた回答が質問に合っている場合でも、質問のヘッダーに short ではなく int が含まれており、検索結果で誤解を招くという単純な事実のために、不完全であると考えています。C# の Int32 は 32 ビットであり、したがって 4 バイトです。 . Int32 を使用する場合に役立つ例をここに投稿します。Int32 の場合、次のようになります。
- LowWordLowByte
- LowWordHighByte
- HighWordLowByte
- ハイワードハイバイト。
そのため、Int32 値をリトル エンディアンの 16 進文字列に変換する次のメソッドを作成しました。この文字列では、すべてのバイトが他のバイトと空白で区切られています。これは、データを送信し、受信者に処理を高速化させたい場合に便利です。受信者は、Split(" ") だけで、スタンドアロンの 16 進文字列として表されるバイトを取得できます。
public static String IntToLittleEndianWhitespacedHexString(int pValue, uint pSize)
{
String result = String.Empty;
pSize = pSize < 4 ? pSize : 4;
byte tmpByte = 0x00;
for (int i = 0; i < pSize; i++)
{
tmpByte = (byte)((pValue >> i * 8) & 0xFF);
result += tmpByte.ToString("X2") + " ";
}
return result.TrimEnd(' ');
}
使用法:
String value1 = ByteArrayUtils.IntToLittleEndianWhitespacedHexString(0x927C, 4);
String value2 = ByteArrayUtils.IntToLittleEndianWhitespacedHexString(0x3FFFF, 4);
String value3 = ByteArrayUtils.IntToLittleEndianWhitespacedHexString(0x927C, 2);
String value4 = ByteArrayUtils.IntToLittleEndianWhitespacedHexString(0x3FFFF, 1);
結果は次のとおりです。
- 7C 92 00 00
- FF FF 03 00
- 7C 92
- FF。
私が作成したメソッドを理解するのが難しい場合は、次の方法がよりわかりやすいかもしれません。
public static String IntToLittleEndianWhitespacedHexString(int pValue)
{
String result = String.Empty;
byte lowWordLowByte = (byte)(pValue & 0xFF);
byte lowWordHighByte = (byte)((pValue >> 8) & 0xFF);
byte highWordLowByte = (byte)((pValue >> 16) & 0xFF);
byte highWordHighByte = (byte)((pValue >> 24) & 0xFF);
result = lowWordLowByte.ToString("X2") + " " +
lowWordHighByte.ToString("X2") + " " +
highWordLowByte.ToString("X2") + " " +
highWordHighByte.ToString("X2");
return result;
}
備考:
- もちろん、uint pSize の代わりに、Byte、Word、DoubleWord を指定する列挙型を使用できます。
- 16 進文字列に変換してリトル エンディアン文字列を作成する代わりに、文字に変換して、やりたいことを何でもできます。
これが誰かを助けることを願っています!