我正在开发一个简单的协议,用于从缓冲区读取/写入整数值。绝大多数整数都低于128,但可能会有更大的值,因此我正在研究某种形式的多字节编码,以便以简洁的方式存储这些值。
以独立于平台(即字节顺序不可知)的方式读取/写入多字节值的最简单,最快捷的方法是什么?
答案 0 :(得分:3)
XDR格式可能对您有所帮助。如果我不得不用一个句子来概括它,它就是一种用于整数的二进制UTF-8。
编辑:正如我在下面的评论中所提到的,我“知道”XDR,因为我在办公室工作中使用了几个与XDR相关的功能。只有在你的评论之后我才意识到我每天使用的“打包XDR”格式甚至不是官方XDR文档的一部分,所以我将单独描述它。
这个想法是这样的:
我不知道这是一个“真实”格式还是我(前)的同事自己创建了这个(这就是为什么我不发布代码)。
答案 1 :(得分:2)
您可能对以下功能感兴趣:
htonl,htons,ntohl,ntohs - convert 主机和网络字节之间的值 为了
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
答案 2 :(得分:2)
文字将是我的第一选择。如果您想要一个变长的二进制编码,您有两个基本选择:
你显然会合并那些带有一些值位的东西。
对于长度指示,它会给你一些长度和一些位一起给出的东西(参见例如UTF-8),
对于结束标记,您可以举例说明MSB set指示最后一个字节,因此每个字节有7个数据位。
其他变种显然是可能的。
答案 3 :(得分:1)
您可以尝试Network Byte Order
答案 4 :(得分:1)
Google的protocol buffers提供了使用可变宽度编码的预制实现。