c/c++语言开发共享这段代码将如何在大端机器上运行?

如果我有代码:

uint64_t a = 0x1111222233334444; uint32_t b = 0; b = a; printf("a is %llx ",a); printf("b is %x ",b); 

输出是:

  a is 1111222233334444 b is 33334444 

问题

    你在那里的代码将以相同的方式工作。 这是因为向下转换的行为由C标准定义。

    但是,如果你这样做:

     uint64_t a = 0x0123456789abcdefull; uint32_t b = *(uint32_t*)&a; printf("b is %x",b) 

    然后它将依赖于endian。

    编辑:

    Little Endian:b是89abcdef

    Big Endian:b是01234567

    在分配变量时,编译器会为您处理事情,因此big-endian上的结果将是相同的。

    在对内存进行类型转换时,结果在big-endian上不一样。

    直接赋值将在小端和大端上产生相同的结果。

    大端机器上的内存类型转换将输出

    a是1111222233334444 b是11112222

      以上就是c/c++开发分享这段代码将如何在大端机器上运行?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

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

      精彩推荐