您对运行它的硬件/操作系统有多少控制权?您是在编写超级便携的代码,还是仅在 32 位和 64 位 x86 Windows [例如] 上运行?
如上所述,要完全“超级便携”,您不能拥有任何形式的“实现定义”大小的对象(例如可以是 16、18、32、36 或 64 位的 int)。此类项目需要存储为已定义数字和顺序的字节,以确保在传输时不会被切断/重新排序。浮点数可能更糟......
许多“超级便携”应用程序将其数据存储为文本。它有点慢,但它使它易于移植,因为文本只是一个字节流,无论您在何种架构上运行它,并且无论您使用哪种机器,它的排序方式都相同(只要您坚持 0-9,A- Za-z, !?<>,.()*& 和其他一些字符——注意 EBCDIC 编码的机器,但它们倾向于处理“ascii-to-ebcdic”转换)。另一端只需要将文本转换回字符串/整数/浮点数/双精度,无论您需要什么。从整数到数字字符串的转换需要对每个数字进行一次除法(使用十六进制或 base-36 会更好一些,但会降低人类可读性 - 有时是好事,有时是坏事)。这显然比存储 4 个字节要慢。另一个缺点是它' s(取决于所使用的值)在文本中存储数字通常比二进制存储时间更长。所以你的网络数据包会大一点。这将比转换产生更大的影响,因为处理器可以在使用 10Gbit 网卡发送 1KB 所需的时间内进行大量数学运算。当然,您需要一些额外的字节(空格、逗号、换行符或其他任何可能的字符),以便您可以区分一个数字 123456 和三个 12、34、56。[当然,不需要使用“ ,“在每个之间]。一旦它到达,你需要一些代码来解析另一端的整个事情。因为处理器可以在使用 10Gbit 网卡发送 1KB 的时间内进行大量数学运算。当然,您需要一些额外的字节(空格、逗号、换行符或其他任何可能的字符),以便您可以区分一个数字 123456 和三个 12、34、56。[当然,不需要使用“ ,“在每个之间]。一旦它到达,你需要一些代码来解析另一端的整个事情。因为处理器可以在使用 10Gbit 网卡发送 1KB 的时间内进行大量数学运算。当然,您需要一些额外的字节(空格、逗号、换行符或其他任何可能的字符),以便您可以区分一个数字 123456 和三个 12、34、56。[当然,不需要使用“ ,“在每个之间]。一旦它到达,你需要一些代码来解析另一端的整个事情。
如果您知道您的系统总是有 32 位整数和 IEEE-754 浮点数 [这些非常常见!],那么您可能只需担心字节顺序即可。如果你知道它总是在“x86”或类似的地方,你也不必担心字节顺序。但是,当您决定“在 iphone 上运行我的代码将是一个好主意”时,您现在可能不得不修改您的代码。当然,您可以将其留给 iphone 方面以符合其余要求。