Проблемы с преобразованием в определенный формат C#
Это может быть немного странным вопросом, однако я создал программу, которая взаимодействует с другой программой (другая программа была создана не мной). Мне нужно отправить "расстояния" в другую программу, однако у меня возникают проблемы с пониманием того, как программа интерпретирует эти расстояния.
Я перехватил устройство, которое успешно отправляет расстояния в программу. Ниже приведен пример отправляемого расстояния. Я думаю, что программа читает на расстоянии, как ushort. Надеюсь, мне будет не хватать простой вещи, так как я не могу перевести мои расстояния в один и тот же формат.
Например: отправляемое расстояние равно 74. Отправлено байтов [0, 74]. Это как ushort 18944.
Мое первоначальное мышление заключалось в том, что расстояние преобразуется в короткий срок. Затем байты ushort отправляются в программу. Однако, похоже, это не так.
1 ответ
Именно Endianness является причиной ошибки:
- отправитель:
74 (int16) == [0, 74]
- сначала старший, затем младший байты - приемник:
74 (int16) == [74, 0]
- сначала младшие, затем старшие байты
И именно поэтому получатель получает
0 + 74 * 256 == 18944
Попробуйте проверить Little / Big Endian (т.е. порядок байтов):
byte[] data = new byte[] { 0, 74 };
// If the WorkStation uses Little Endian order, we have to reverse the buffer
ushort dist = BitConverter.ToUInt16(BitConverter.IsLittleEndian
? data.Reverse().ToArray()
: data,
0);
// 74
Console.WriteLine(dist);