Как получить короткие данные в C #, A909 для 41104? - PullRequest
2 голосов
/ 02 сентября 2010

Я пытаюсь преобразовать значение типа int в 16-битный тип без знака (USHORT). В примере 41104 - это A909 в ushort, но в 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 ]

2 голосов
/ 02 сентября 2010

На самом деле правильное (= шестнадцатеричное) значение равно A090.Мне не важно, будет ли это ushort или нет, вам нужно отобразить шестнадцатеричный эквивалент.

Предоставленный вами фрагмент кода уже делает это.Один байт - «A0», другой - «90».Вы просто должны правильно оформить заказ.

Другой способ - позволить .NET выполнить свою работу

String.Format("{0:X}", 41104);

Как вы можете видеть, на самом деле это не преобразование данных, а скорее другой способдисплея.

1 голос
/ 02 сентября 2010

Вам нужно изменить порядок байтов:

byte[] bytes = BitConverter.GetBytes(41104);
if (BitConverter.IsLittleEndian)
{    List<byte> tmp = new List<byte>();
     tmp.AddRange(bytes);
     tmp.Reverse();
     bytes = tmp.ToArray();
}
...