c++ - 大端方式小端方式编程判断

 us0569398 发布于 2022-11-04 21:09

编程判断大端方式还是小端方式
我自己的理解和代码如下:
如果数字0x12345678
那么大端方式从低地址到高地址依次存储 0x12 0x34 0x56 0x78
如果是小端方式的话从低地址到高地址依次存储 0x78 0x56 0x34 0x12
我的程序如下:

int main()
{
    unsigned int i=0x12345678;
    cout<

结果输出却让我大跌眼镜

12345678
Big Endition

输出我有点看不懂,一般笔记本不都是大端方式吗?
还有一个问题,编程实现大端方式小端方式,我在网上搜了下还有用UNION联合体,没看懂,求解答。联合体不是在同一时刻只能存储一个变量吗,在给c.a赋值后,c.b怎么可能为1呢?

int checkCPU()
{
    {
        union w
        {
            int a;
            char b;
        }c;
        c.a = 1;
        return (c.b == 1);
    }
}

附上个人电脑信息:
MacBook Pro (Retina, 13-inch, Early 2015)
处理器 2.7 GHz Intel Core i5
编辑器 Xcode6

6 个回答
  • Intel 处理器确实是小端的,谁告诉你笔记本是大端了.
    直接char跟多字节类型比较就好了..UNION可行,但是并没有什么卵用,脱裤子放屁的事

    2022-11-12 01:45 回答
  • 我在x86_64平台(Intel core i5-4590)上,用你的程序,的确测出了小端。
    (话说endian写法错了吧……)
    手上没MacbookPro可以试。
    没看出你的写法有甚么问题,只能说这结果很奇怪……

    下面说union的用法。
    union的意思是“这段内存数据的类型可能是以下其中一种:……”
    (编译器会自动分配一段内存,确保足够放下里面最大的类型)
    所以题中的union的意思,是指“c这个变量既可能是int,也可能是char”。
    而c.a就是“把c当作int看待”,c.b就是“把c当作char看待”。
    也就是说,c.a等价于(int)(&c),c.b等价于(char)(&c)。
    所以,先用c.a再用c.b是没问题的,你只是在不同时刻把c当成不同的类型进行操作而已。
    然后就和你写的程序没甚么分别了……

    2022-11-12 01:45 回答
  • 不要用编程去测试
    因为你无法控制编译器行为
    不同的编译器产生的机器码不同
    因为这些东西c++和c语言规范都没有明确规定
    请查阅cpu手册 这才是唯一的方式

    2022-11-12 01:45 回答
  • 联合体就是联合体内成员公用一块存储区,a用的空间也是b用的

    2022-11-12 01:45 回答
  • int isBigEndian() {
        int num = 1;
        char* ch = &num;
        if (ch[0] == 1) 
            return 0;  //little
        else
            return 1;
    }
    2022-11-12 01:45 回答
  • c++看不懂,就说说union吧。假设int 是4个byte,那么当设置 c.a=1后,大端的话内存为 0x00000001, 因为高位都是0,最低位为01,内存从左往右地址是从低到高,符合大端定义高位字节在内存地址低位。
    小端则相反,内存中为 0x01000000。b为char,占一个字节,并且是低内存地址的一个字节,如果在小端模式,则为0x01, 大端模式为0x00。结论是如果 c.b==1 返回true, 则为小端。

    补充:Intel x86 processors 都是小端,现在大部分机器都是Intel的cpu吧。

    看懂c++了,结论没错,是小端的。

    2022-11-12 01:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有