c/c++语言开发共享C端转换:逐位转换

我有一个特殊的无符号长整数(32位),我需要逐位转换它的字节顺序 – 我的long表示几个所有的东西都一起变成一个二进制文件。

我该怎么做?

    字节顺序是一个字级概念,其中字节首先存储在最高有效字节(大端)或最低有效字节(小端)。 通过网络传输的数据通常是大端(所谓的网络字节顺序)。 存储在计算机内存中的数据可以按任意顺序排列,考虑到英特尔x86架构的普及,小端是最常见的。 尽管大多数计算机体系结构都是大端,但x86无处不在,以至于您最常在内存中看到小端数据。

    无论如何,所有这一点的重点是字节序是一个非常具体的概念,只适用于字节级,而不是位级。 如果ntohs()ntohl()htons()htonl()没有做你想要的,那么你所处理的不是字节序本身。

    如果你需要反转你的无符号长的各个位或做其他复杂的事情,请发布更多关于你究竟需要做什么的信息。

    小心理解’endianness’的含义。 它指的是数据中的字节顺序,而不是字节中的位。 您可能只需要使用像htonl或ntohl这样的函数来转换您的d-word。

    如果您真的想要反转32b数据类型中所有位的顺序,您可以编写一个迭代算法来屏蔽并将每个位移到适当的reflection位置。

    对于unsigned long值,简单的endianess转换函数可能如下所示:

     typedef union { unsigned long u32; unsigned char u8 [ 4 ]; } U32_U8; unsigned long SwapEndian(unsigned long u) { U32_U8 source; U32_U8 dest; source.u32 = u; dest.u8[0] = source.u8[3]; dest.u8[1] = source.u8[2]; dest.u8[2] = source.u8[1]; dest.u8[3] = source.u8[0]; return dest.u32; } 

    要反转整数的位顺序,可以在一个方向上移出位,并将位移到相反方向的目标位置。

      以上就是c/c++开发分享C端转换:逐位转换相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      www.ctvol.com true Article c/c++语言开发共享C端转换:逐位转换

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549201.html

      (0)
      上一篇 2021年1月13日 下午11:23
      下一篇 2021年1月13日 下午11:27

      精彩推荐