• mips32和x86下的大小端模式判定


    一.背景

    1.1 mips32搭载32bit vxworks操作系统

    1.2 x86搭载64bit windows10操作系统

    二.大小端模式判定前的准备

    2.1 先要知道各种架构上各种整型数占据的bit数,也就是通过范围来确定bit数

    上一篇已经讲过,特奉上地址如下:

    http://www.cnblogs.com/dakewei/p/7690847.html

    2.2 mips32上的判定

    代码如下:

    #include <stdio.h>

    void main(void)

    {

      unsigned long int ul = 1;

      unsigned char *p = &ul;

      p += (sizeof(unsigned long) - 1); /*因为mips32上unsigned long 类型占据了32个bit,因此移动3个字节,以便到达最后一个字节*/

      printf("*p = %d,p = %p,ul = %d,&ul = %p ",*p,p,ul,&ul);

    }

    运行结果如下:

    *p = 1,p = 0x80cf3fcb,ul = 1,&ul = 0x80cf3fc8  

    对运行结果进行分析如下:

    先回忆大小端的定义:

    大端模式: 低位数据存储在高地址

    小端模式:低位数据存储在低地址

    那么内存中数据的存放情况如下:

                       -------------------

    0x80cf3fc8  |    0x00         |

         --------------------

    0x80cf3fc9  |    0x00         |

            --------------------

    0x80cf3fca |      0x00        |

                      --------------------

    0x80cf3fcb |     0x01         |

                      --------------------

    由此可以判定:笔者的mips32机器是大端机器(笔者的这台mips32机器是可以设置大小端的)

    2.3 x86上的判定

    代码如下:

    #include <stdio.h>

    void main(void)

    {

      unsigned long int ul = 1;

      unsigned char *p = &ul;

      p += (sizeof(unsigned long) - 1); /*因为x86上unsigned long 类型占据了64个bit,因此移动7个字节,以便到达最后一个字节*/

      printf("*p = %d,p = %p,ul = %d,&ul = %p ",*p,p,ul,&ul);

    }

    运行结果如下:

    *p = 0,p = 0xffffcc07,ul = 1,&ul = 0xffffcc00

    对运行结果进行分析如下:

    先回忆大小端的定义:

    大端模式: 低位数据存储在高地址

    小端模式:低位数据存储在低地址

    那么内存中数据的存放情况如下:

                       -------------------

    0xffffcc00  |    0x01         |

         --------------------

    0xffffcc01 |    0x00         |

            --------------------

    0xffffcc02 |      0x00        |

                      --------------------

    0xffffcc03 |     0x00        |

                      --------------------

    0xffffcc04  |    0x00         |

         --------------------

    0xffffcc05 |    0x00         |

            --------------------

    0xffffcc06 |      0x00        |

                      --------------------

    0xffffcc07 |     0x00         |

                      --------------------

    由此可以判定:笔者的x86机器是小端机器

  • 相关阅读:
    我拒绝接受的几个最佳编程实践方法
    女人千万别写代码
    Visual Studio原生开发的10个调试技巧(二)
    20个很有用的PHP类库
    8个开发必备的PHP功能
    青少年如何使用 Python 开始游戏开发
    rmdir 删除空目录
    rm 删除文件或目录
    mv 移动或重命名文件
    cp 复制文件或目录
  • 原文地址:https://www.cnblogs.com/dakewei/p/7699429.html
Copyright © 2020-2023  润新知