[英]C++: How to read and write multi-byte integer values in a platform-independent way?
我正在开发一个简单的协议,用于从/向缓冲区读取/写入 integer 值。 绝大多数整数都低于 128,但更大的值是可能的,所以我正在寻找某种形式的多字节编码来以简洁的方式存储值。
以独立于平台(即字节顺序不可知)的方式读取/写入多字节值的最简单和最快的方法是什么?
XDR格式可能会对您有所帮助。 如果非要用一句话来概括的话,那就是整数的一种二进制 UTF-8。
编辑:正如我在下面的评论中提到的,我“知道”XDR,因为我在办公室工作中使用了几个与 XDR 相关的功能。 只有在您发表评论后,我才意识到我每天使用的“打包 XDR”格式甚至不是官方 XDR 文档的一部分,所以我将单独描述它。
因此,这个想法是:
我不知道这是一种“真实”的格式,还是我的(前)同事自己创建的(这就是我不发布代码的原因)。
您可能对以下功能感兴趣:
htonl, htons, ntohl, ntohs - 在主机和网络字节顺序之间转换值
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
文本将是我的第一选择。 如果你想要一个可变长度的二进制编码,你有两个基本的选择:
您显然将它们与一些值位合并。
对于一个长度指示,它会给你一些长度和一些位一起给出的东西(参见例如 UTF-8),
对于结束标记,您可以例如 state 设置的 MSB 指示最后一个字节,因此每个字节有 7 个数据位。
其他变体显然是可能的。
您可以尝试 网络字节顺序
Google 的协议缓冲区提供了使用可变宽度编码的预制实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.