Я читаю некоторые данные через сокет. Интегральные типы данных без проблем, методы System.BitConverter корректно обрабатывают преобразование. (Итак, нет никаких проблем Endian, о которых нужно беспокоиться, я думаю?)Преобразование байта [] двоичной фиксированной точки в значение с плавающей запятой
Однако BitConverter.ToDouble не работает для частей с плавающей запятой данных ... исходная спецификация для меня немного низка, но говорит о двоичном представлении фиксированной точки с положительным смещением байта в более значительном направлении и отрицательным смещением байта в менее значительном направлении.
Большинство исследований, которые я провел, было нацелено на C++ или полную библиотеку обработки фиксированной точки, обрабатывающую синусы и косинусы, что походит на излишнюю проблему. Может ли кто-нибудь помочь мне с помощью функции C# для создания float из 8 байтов массива байтов с, скажем, смещением -3 байта?
Более подробная информация о формате в соответствии с просьбой:
Подписанный численное значение данных с фиксированной точкой должно быть представлено в двоичном дополнительном коде, комплемент notation.For данных с фиксированной точкой, значение каждого параметра данных должны быть определены в отношении к эталонному байту. Байт ссылки определяет восьмибитовое поле с единицей измерения в позиции LSB. Значение LSB ссылочного байта равно ONE. Байт сдвига должны быть определены целым числом, указывающего положение младшего байта элемента данных относительно опорного байта. MSB элемента данных представляет бит знака. Бит-позиции между MSB абсолютного значения параметра и MSB самого значимого байта должны быть равны значению бита знака.
Данные с плавающей запятой должны быть представлены в виде двоичного числа с плавающей запятой в соответствии со стандартом IEEE ANSI/IEEE Std 754-2008. (Это предложение из другого раздела, который может быть красной селедкой).
Этот вопрос невозможно ответить на данный момент. Чтобы преобразовать два разных формата, вам нужны точные определения этих форматов. Вы не только не дали определения для формата с фиксированной точкой (плавающая точка определена IEE754), ваши вопросы подсказывают, что на самом деле у вас нет такого определения. Вам нужно получить эту информацию. –
Если это простой номер фиксированной точки, вы можете проанализировать его как int, а затем умножить его на определенную константу. Например, при 2^-16, если фиксированная точка равна 16 дробным битам. – CodesInChaos
@CodeInChaos Это правда, но OP не знает формат, даже после его обновления. –