Как получить короткие данные в C#, A909 для 41104?
Я пытаюсь преобразовать значение типа int в 16-битный тип без знака (USHORT). В примере 41104 - это A909 в коротком, но в C# я пробовал с примером кода как (с помощью статьи MSDN BitConverter.GetBytes Yöntem (UInt16)):
byte[] bytes = BitConverter.GetBytes(41104);
string bytes = BitConverter.ToString(byteArray);
//It returns "90-A0"
Как я могу получить значение A909 в качестве ushort для 41104?
2 ответа
Решение
На самом деле правильное (= шестнадцатеричное) значение A090. Мне не важно, будет ли это ushort или нет, вам нужно отобразить шестнадцатеричный эквивалент.
Предоставленный вами фрагмент кода уже делает это. Один байт - "A0", другой - "90". Вы просто должны правильно оформить заказ.
Другой способ - позволить.NET сделать работу
String.Format("{0:X}", 41104);
Как видите, на самом деле это не преобразование данных, а другой способ отображения.
Вам нужно изменить порядок байтов:
byte[] bytes = BitConverter.GetBytes(41104);
if (BitConverter.IsLittleEndian)
{ List<byte> tmp = new List<byte>();
tmp.AddRange(bytes);
tmp.Reverse();
bytes = tmp.ToArray();
}