Даже если принятый ответ подходит для вопроса, я считаю его неполным из-за того простого факта, что вопрос содержит int, а не short в заголовке и вводит в заблуждение в результатах поиска, и, как мы знаем, Int32 в C # имеет 32 бита и таким образом 4 байта. Я опубликую здесь пример, который будет полезен в случае использования Int32. В случае Int32 имеем:
- LowWordLowByte
- LowWordHighByte
- HighWordLowByte
- HighWordHighByte.
И, таким образом, я создал следующий метод для преобразования значения Int32 в шестнадцатеричную строку с прямым порядком байтов, в которой каждый байт отделяется от других пробелом. Это полезно, когда вы передаете данные и хотите, чтобы получатель выполнял обработку быстрее, он может просто разделить ("") и получить байты, представленные в виде отдельных шестнадцатеричных строк.
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
- Вместо преобразования в шестнадцатеричную строку и создания строки с прямым порядком байтов вы можете преобразовать в символы и делать все, что захотите.
Надеюсь, это кому-нибудь поможет!