【问题标题】:How does the Byte Order Fallacy code work?字节顺序谬误代码如何工作?
【发布时间】:2018-01-18 12:18:46
【问题描述】:

在标题为字节顺序谬误this article 中,作者指出不必担心代码运行的系统的字节顺序。这篇文章也在a few places on StackOverflow 中被提及。在文章中,作者假设只要你知道你的数据流的字节序,你就可以使用下面的sn-ps来自动处理它:

小端流:

i = (data[0]<<0) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);

大端流:

i = (data[3]<<0) | (data[2]<<8) | (data[1]<<16) | (data[0]<<24);

由于作者没有对此进行任何解释,我有两个问题:第一,这实际上是如何工作的?第二个:如果不检查系统的字节序(如果可能的话),如何反转这个

【问题讨论】:

    标签: endianness


    【解决方案1】:

    sn-ps 起作用,因为位移运算符对数字进行操作,就好像它是大端一样,而不管字节顺序如何。这意味着,在 big-endian 和 little-endian 机器上将 0x1234 向右移动 4 位将产生代表 0x0123 的数字。

    这也适用于左侧,即0x1234 &lt;&lt; 4 == 0x12340,在整数大小的限制内。

    相反,即写入具有给定字节序的流,可以通过使用右移而不是左移来分解整数来完成:

    char buf[4] = {x, x >> 8, x >> 16, x >> 24}; // Little-endian
    char fub[4] = {x >> 24, x >> 16, x >> 8, x}; // Big-endian
    

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 2020-02-12
      • 2021-11-17
      相关资源
      最近更新 更多