Float to Byte array в другом формате

Я использую Bitconverter для преобразования из числа с плавающей точкой в ​​массив байтов.

byte[] ValueByteArray = BitConverter.GetBytes(Value);

Сейчас я оцениваю свое приложение с другим приложением, и цель, конечно, в том, что мой вывод точно такой же. Проблема в том, что это не так.

Я на 100% уверен, что результаты теста верны, и мое значение "неверно" или в другом формате. Потому что в клиенте, подключенном к эталонному приложению, значение равно 5,5, а у меня - 6,09414613e-039.

Мое заявление:

  • Значение теста: 5,5
  • Значение байтового массива: 0.0.5C.42
  • Значение в клиентском приложении: 6.09414613e-039

Справочное приложение:

  • Значение теста: 5,5
  • Значение байтового массива: 0.0.B0.40
  • Значение в клиентском приложении: 5,5

1 ответ

Решение

Ваша справочная заявка верна; 0x00005C42 - 55, а не 5,5; это может быть так же просто, как запятая против периода, как десятичный спецификатор в вашем коде синтаксического анализа. 6.09414613e-039, по-видимому, является ошибкой смещения в байтовом порядке (см. Нижний ряд)

Примеры:

float value = 5.5F;
var bytes = BitConverter.GetBytes(value);
Console.WriteLine(BitConverter.ToString(bytes)); // 00-00-B0-40

а также

float value = 55;
var bytes = BitConverter.GetBytes(value);
Console.WriteLine(BitConverter.ToString(bytes)); // 00-00-5C-42

а также

float value = 6.09414613e-039F;
var bytes = BitConverter.GetBytes(value);
Console.WriteLine(BitConverter.ToString(bytes)); // 00-5C-42-00
Другие вопросы по тегам