Насколько я знаю, библиотека C не помогает сериализовать числовые значения в поток нетекстового байта. Исправьте меня, если я ошибаюсь.
Самый стандартный используемый инструмент - htonl
и др. из POSIX. Эти функции имеют недостатки:
- 64-битная поддержка не поддерживается.
- Поддержка плавающей запятой отсутствует.
- Нет версий для подписанных типов. При десериализации преобразование без знака в подпись зависит от подписанного интегрального переполнения, который является UB.
- В их именах не указывается размер типа данных.
- Они зависят от 8-битных байтов и наличия точного размера uint_N_t.
- Типы ввода те же, что и типы вывода, вместо обращения к байтовому потоку.
- Для этого требуется, чтобы пользователь выполнил указатель типа, который, возможно, небезопасен при выравнивании.
- Выполнив этот тип, пользователь, скорее всего, попытается преобразовать и вывести структуру в своем макете собственной памяти, что приводит к непредвиденным ошибкам.
Интерфейс для сериализации стандартных байтов с размерами char
до 8 бит будет находиться между стандартом C, который действительно не признает 8-битные байты, и любые стандарты (МСЭ?) устанавливают октет как фундаментальная единица передачи. Но старые стандарты не пересматриваются.
Теперь, когда C11 имеет много дополнительных компонентов, двоичное расширение сериализации может быть добавлено рядом с такими вещами, как потоки, не предъявляя требований к существующим реализациям.
Может ли такое расширение быть полезным или беспокоиться о машинах с не-двумя дополнениями, которые просто бессмысленны?