У меня есть поток байтов, который содержит флаг, который идентифицирует конечность данных в заголовке. Я хочу прочитать двойники из потока, которые, по-видимому, должны быть разными, если сущность данных в заголовке отличается?Чтение и запись из байтового потока, если конечная информация отличается от текущей машины
В настоящее время я использую BinaryReader и вызываю ReadDouble для чтения данных из потока, но если флаг endianness указывает, что поток данных имеет различную консистенцию, чем архитектура машины, то, предположительно, это не сработает?
Как это следует обрабатывать? Должен ли я проверять достоверность моих данных по сравнению с текущей машиной, тогда, когда я хочу прочитать double, вместо этого прочитайте байты в массиве байтов и сделайте массив. Восстанавливайте данные перед использованием BitConverter.ToDouble() с обратным данные и смещение нуля?
Я мог бы просто протестировать это, но у меня нет источника данных для обеих сторон, поэтому немного беспокоюсь о создании тестовых данных для проверки синтаксического анализа, и это отличается от того, что может выглядеть «настоящими» данными.
У меня есть спецификация, в которой указан формат. У меня есть только один пример реализации (так что только один пример endianness в моих данных), но код должен иметь дело с данными, в которых когда-либо был формат. Я не использую .net на обоих концах. действительно, все знают, что у меня есть байт [] в качестве входных данных, и мне нужно разобрать его, чтобы извлечь данные из массива. Первая часть массива - это заголовок, который содержит среди других информации порядок байтов кодированных данных. –
Итак, сделайте следующее: в своем приложении преобразуйте значение массива константного байта (например, '{0xFF, 0xFE, 0x01, 0x02}') в значение Int32. Затем сделайте то же самое с массивом байтов, который вы получили от фактического потока данных. Сравните их. Если они одинаковы, то консенсус один и тот же. Если другое, то вы знаете, что вам нужно отменить. Затем используйте класс для выбора endianness, связанный в ответе выше, в зависимости от ситуации. Это должно сработать. – Cheeso
Спасибо. я могу проверить консистенцию машины или, по крайней мере, сущность, которую будет использовать инфраструктура (BitConverter.IsLittleEndian), я действительно хотел подтвердить, что реверсирование байтов с использованием Array.Reverse и передача их в BitConverter.ToDouble() метод был правильным путем вперед, если сущность не была одинаковой. –