c/c++语言开发共享小端或大端

#include  union Endian { int i; char c[sizeof(int)]; }; int main(int argc, char *argv[]) { union Endian e; ei = 1; printf("%d n",&e.i); printf("%d,%d,n",ec[0],&(ec[0])); printf("%d,%d",ec[sizeof(int)-1],&(ec[sizeof(int)-1])); } 

OUTPUT:

 1567599464 1,1567599464, 0,1567599467 

LSB存储在较低地址中,MSB存储在较高地址中。 这不应该是大端吗? 但我的系统配置显示它是一个小端架构。

    你的系统绝对是little-endian 。它是big-endian ,代码如下:

     printf("%d,%d,n",ec[0],&(ec[0])); 

    将为第一个%d而不是1打印0 。 在little-endian 1中存储为

     00000001 00000000 00000000 00000000 ^ LSB ^Lower Address 

    但在big-endian它存储为

     00000000 00000000 00000000 00000001 ^LSB ^Higher Address 

    并且不要使用%d打印变量的地址,使用%p

    对于小端,最低有效位存储在第一个字节中(具有最低地址)。

    这就是你所看到的,所以似乎有理智;)

     00000001 (Hexadecimal: 32 bits) ^^ ^^ MS LS Byte Byte 

    最低地址=> little-endian的最低有效字节。 整数从小端开始放入内存。 由此得名。

    字节序

    您将包含“1”(最低有效)的字节作为第一个元素(ec [0]),包含“0”的字节作为第二个元素(ec [1])。 这是litte endian,不是吗?

    什么是Big endian以及什么是little endian你错了。 读这个

    在我看来很好。 “little endian”(又名“正确的方式”:-)表示“先存储的低位字节”,这正是您的代码所显示的内容。 (顺便说一下,你应该使用“%p”来打印地址)。

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

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

      ctvol管理联系方式QQ:251552304

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

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐