Переносимые примитивы двоичной сериализации C

Насколько я знаю, библиотека C не помогает сериализовать числовые значения в нетекстовый поток байтов -. Поправьте меня если я ошибаюсь.

Наиболее стандартным инструментом является htonl. и др. из POSIX. У этих функций есть недостатки:

  • Поддержки 64 -бит нет.
  • Поддержка плавающей точки -отсутствует.
  • Версий для подписанных типов нет. При десериализации беззнаковое преобразование -в -со знаком зависит от целочисленного переполнения со знаком, которым является UB.
  • Их имена не указывают размер типа данных.
  • Они зависят от 8 -битных байтов и наличия точного -размера uint_Н_т.
  • Типы ввода такие же, как и типы вывода, вместо ссылки на поток байтов.
    • Это требует от пользователя выполнения приведения указателя к типу, что может быть небезопасным при выравнивании.
    • Выполнив это приведение типов, пользователь, скорее всего, попытается преобразовать и вывести структуру в ее собственном расположении памяти, что является плохой практикой, которая приводит к непредвиденным ошибкам.

Интерфейс для сериализации произвольного -размера charв 8 -битных стандартных байтов будет находиться между стандартом C, который на самом деле не признает 8 -битных байтов, и любыми стандартами (ITU? )установил октет в качестве основной единицы передачи. Но старые стандарты не пересматриваются.

Теперь, когда C11 имеет множество дополнительных компонентов,расширение бинарной сериализации может быть добавлено наряду с такими вещами, как потоки, не предъявляя требований к существующим реализациям.

Будет ли такое расширение полезным, или беспокоиться о машинах, не -двойных -дополнений, так бессмысленно?

10
задан Potatoswatter 24 July 2012 в 01:39
поделиться