有很多地方在讨论如何进行不同类型的字节翻转,但我不能轻易找到解释这个概念的地方以及如何发生字节交换的一些典型例子。
所以这就是问题:什么是byteswapping以及为什么/何时需要这样做?
如果示例是一个很好的解释方法,我会很高兴,如果他们在标准C ++中。书籍参考被认可,优先考虑Lippman或Pratas C ++引物,因为那些是我可用的。
答案 0 :(得分:4)
如果我正确理解了您的问题,那么您正在谈论big endian
转换为little endian
并返回。
之所以发生这种情况是因为某些微处理器使用little endian
格式来引用内存,而其他微处理器使用big endian
格式。
互联网上的字节流例如是big endian
,而您的intel CPU使用little endian
格式。
因此,要从网络转换到CPU或CPU转换为网络,我们需要一种名为byteswapping的转换机制。
操作系统提供ntohl()
和htonl()
功能来执行此操作。
答案 1 :(得分:1)
正如评论中所提到的,byteswapping是将值endianess从一个更改为另一个的过程。假设你的记忆中有一个值(左边的地址最低):
DE AD BE EF <- big endian
这个值由4个字节组成 - 以十六进制表示,两个数字是一个字节。
如果我们现在假设上面的值是用big endian编码的,那么这意味着如果内存中的第一个字节是最低位字节 - 这里是DE
。英特尔x86处理器架构适用于小端,这意味着内存中的值与上面相同:
FE BE AD DE <- little endian
这两个值代表相同的值,但具有不同的字节顺序。