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\n",*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\n",*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机器是小端机器
mips32和x86下的大小端模式判定的更多相关文章
- CPU的大小端模式
不同体系结构的CPU,数据在内存中存放的排列顺序是不一样的. 存储器中对数据的存储是以字节(Byte)为基本单位的,因此,字(Word)和半字(Half-Word)在存储器中就有两种次序,分别称为:大 ...
- 清晰讲解LSB、MSB和大小端模式及网络字节序
时隔一个月又回到了博客园写文章,很开心O(∩_∩)O~~ 今天在做需求的涉及到一个固件版本的概念,其中固件组的人谈到了版本号从MSB到LSB排列,检索查阅后将所得整理如下. MSB.LSB? MSB( ...
- CPU大小端模式及转换
通信协议中的数据传输.数组的存储方式.数据的强制转换等这些都会牵涉到大小端问题. CPU的大端和小端模式很多地方都会用到,但还是有许多朋友不知道,今天暂且普及一下. 一.为什么会有大小端模式之分呢? ...
- C/C++ 关于大小端模式
大端模式: 数据的高字节存在低地址 数据的低字节存在高地址 小端模式: 数据的高字节存在高地址 数据的低字节存在低地址 如图,i为int类型占4个字节,但只有1个字节的值为1,另外3个字节值为 ...
- union关键字 与大小端模式
union 关键字(主要用来压缩空间,如果一些数据不可能同一时间同时用到,可是考虑使用union) union关键字声明的变量称之为联合体变量: (1)联合体变量只配置一个足够大的空间来容纳最大长度的 ...
- C语言怎么简单测试为大小端模式
作者:Slience_J 原文地址:https://blog.csdn.net/slience_j/article/details/52048267 1.什么是大小端模式? 大端模式,是指数据的高字节 ...
- 经典笔试题:用C写一个函数测试当前机器大小端模式
“用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 #include <stdio.h> union tes ...
- [Linux] Big-endian and Little-endian (大小端模式)
Big-endian Little-endian 大小端模式 https://en.wikipedia.org/wiki/Endianness 大端模式,是指数据的高字节保存在内存的低地址中,而数 ...
- Linux大小端模式转换函数
转自 http://www.cnblogs.com/kungfupanda/archive/2013/04/24/3040785.html 不同机器内部对变量的字节存储顺序不同,有的采用大端模式(bi ...
随机推荐
- 洛谷P2602 数字计数 [ZJOI2010] 数位dp
正解:数位dp 解题报告: 传送门! 打算在寒假把学长发过题解的题目都做辣然后把不会的知识点都落实辣! ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 然后这道题,开始想到的时候其实想到的是大模拟,就有点像之前考试贪 ...
- 洛谷P1083 借教室 NOIP2012D2T2 线段树
正解:线段树 解题报告: ...真的不难啊只是开了这个坑就填下? 就是先读入每天的教室数建个线段树然后每次读入就update一下,线段树存的就这一段的最小值啊,然后如果有次更新完之后tr[1]小于0了 ...
- 缓存淘汰算法(LFU、LRU、ARC、FIFO、MRU)分析
缓存算法是指令序列,用于决定缓存系统中哪些数据应该被删去. 常见类型包括LFU.LRU.ARC.FIFO.MRU. 一.最不经常使用算法(Least Frequently Used-LFU): 它是基 ...
- byte处理的几种方法
/** * 字符串转16进制byte * @param * @return * @throws Exception * @author hw * @date 2018/10/19 9:47 */ pr ...
- CloudFlare防护下的破绽:寻找真实IP的几条途径
本文仅代表作者独立观点,本文提及的技术仅供安全研究和渗透测试用途 看Twitter发现CloudFlare总裁什么的最近很高调,北京.香港的跑着参加会议.发表演说什么的,CloudFlare似乎也没那 ...
- 验证 Googlebot (检查是否为真的Google机器人)
您可以验证访问您服务器的网页抓取工具是否确实是 Googlebot(还是其他 Google 用户代理).如果您担心自称是 Googlebot 的垃圾内容发布者或其他麻烦制造者访问您的网站,则会发现该方 ...
- Android adb.exe程序启动不起来处理方法
经常遇到 Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be ...
- 【CUDA并行程序设计系列(1)】GPU技术简介
http://www.cnblogs.com/5long/p/cuda-parallel-programming-1.html 本系列目录: [CUDA并行程序设计系列(1)]GPU技术简介 [CUD ...
- linux 统计wc
说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选项含义如下: - c 统计字节 ...
- kendo grid应用经验总结
学习网址 https://docs.telerik.com/kendo-ui/controls/editors/dropdownlist/overview https://demos.telerik. ...