据我所知,C库没有提供将数字值序列化为非文本字节流的帮助。如果我错了请纠正我。
目前使用最广泛的工具是POSIX中的
目前使用最广泛的工具是POSIX中的
htonl
等函数。但这些函数有以下缺点:
- 没有64位支持。
- 没有浮点数支持。
- 没有有符号类型的版本。在反序列化时,无符号到有符号的转换依赖于有符号整数溢出,这是未定义行为。
- 它们的名称没有说明数据类型的大小。
- 它们依赖于8位字节和精确大小的uint_N_t的存在。
- 输入类型与输出类型相同,而不是引用一个字节流。
- 这需要用户执行指针类型转换,可能不安全。
- 执行了这种类型转换后,用户很可能会尝试以其本机内存布局输出和转换结构体,这是一种糟糕的做法,会导致意外错误。
long
是 64 位的,而且一个具有非 8 位字节的系统不太可能完全匹配 16 位的short
或 32 位的long
。C 标准故意模棱两可。 - Potatoswatter