C语言怎么简单测试为大小端模式
作者:Slience_J
原文地址:https://blog.csdn.net/slience_j/article/details/52048267
1、什么是大小端模式?
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
2、知道大小端有何用?
首先要介绍一下字节序列,所谓的字节序列就是大于或者等于两个字节类型的数据存放在内存中的顺序(一个字节就不必谈序列!)。那么什么时候要用到我们去判断机器是大端模式还是小端模式呢?当我们在跨平台开发或者网络编程的时候就要去关心字节序列了,比如说我们用机器A和B通信,如果A和B的端序都是一样的话,中间自然就不用转换来转换去了。但是如果A和B机器的端序不一样,如果我们不去做相应的转换,我们传过去的二进制序列就是反的!
3、如何去判断你的机器是大端模式还是小端模式?
在这里我提供了简单的三个方法,如果有哪里不妥的希望大牛指出。
第一种:
#include
int main(int argc, char *argv[])
{
int i = 0x12345678;
char c = i; printf("%x \n", c); return ;
}
注:这种方式的定义一个int型的数据类型,初始化为十六进制0x12345678,在内存中存放的位置从低位到高位,依次为(低位)87654321(高位);再定义一个占一个字节的char型,然后把int型数据赋值给char型数据,因为char占一个字节,int占四个字节,这样赋值就会丢掉三个字节,但是这正是我们需要的,如果它打印出78(小端模式),如果打印出12(大端模式)。
第二种:
#include
int main(int argc, char *argv[])
{
int i = 0x12345678;
char *c = (char *)&i; printf("%x \n", *c); return ;
}
注:这种方式和上面那种方式差不多,只是运用到了指针的知识,原理都一样
第三种:
#include typedef union NODE
{
int i;
char c;
}Node; int main(int argc, char *argv[])
{
Node node; node.i = 0x12345678; printf("%x\n", node.c); return ;
}
注:这种方式运用到了union(共用体),所谓的共用体,就是共同使用一块内存,共用体的大小是共用体中的所有类型最大的哪一个,例如上面的共用体中int是四个字节,char为一个字节,那么这个共用体的大小就是四个字节。当然这个要看你的系统是多少位的(在这里我说的是32位系统,64位系统int是8个字节),先对共用体中的int型数据i赋初值,然后在用char去访问一个字节的数据,如果打印出结果为78(小端模式),反之为大端模式。
C语言怎么简单测试为大小端模式的更多相关文章
- 用C语言代码判别CPU的大小端模式
Big-endian和little-endian是描述排列存储在计算机内存里的字节序列的术语. Big-endian是一种大值的一端(序列中更典型值)存在前面(在最小的存储地址)的顺序. ...
- 经典笔试题:用C写一个函数测试当前机器大小端模式
“用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 #include <stdio.h> union tes ...
- CPU的大小端模式
不同体系结构的CPU,数据在内存中存放的排列顺序是不一样的. 存储器中对数据的存储是以字节(Byte)为基本单位的,因此,字(Word)和半字(Half-Word)在存储器中就有两种次序,分别称为:大 ...
- union关键字及大小端模式
1. union 关键字 union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在 union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有 ...
- CPU大小端模式及转换
通信协议中的数据传输.数组的存储方式.数据的强制转换等这些都会牵涉到大小端问题. CPU的大端和小端模式很多地方都会用到,但还是有许多朋友不知道,今天暂且普及一下. 一.为什么会有大小端模式之分呢? ...
- C/C++ 关于大小端模式
大端模式: 数据的高字节存在低地址 数据的低字节存在高地址 小端模式: 数据的高字节存在高地址 数据的低字节存在低地址 如图,i为int类型占4个字节,但只有1个字节的值为1,另外3个字节值为 ...
- union关键字 与大小端模式
union 关键字(主要用来压缩空间,如果一些数据不可能同一时间同时用到,可是考虑使用union) union关键字声明的变量称之为联合体变量: (1)联合体变量只配置一个足够大的空间来容纳最大长度的 ...
- [20190423]简单测试latch nowilling等待模式.txt
[20190423]简单测试latch nowilling等待模式.txt --//我对这个问题的理解就是如果参数willing=0,表示无法获取该latch,直接退出,再寻找类似的latch.--/ ...
- mips32和x86下的大小端模式判定
一.背景 1.1 mips32搭载32bit vxworks操作系统 1.2 x86搭载64bit windows10操作系统 二.大小端模式判定前的准备 2.1 先要知道各种架构上各种整型数占据的b ...
随机推荐
- 【BZOJ3238】【AHOI2013】差异
sam好,好写好调好ac! 原题: 图片题面好评 2<=N<=500000 在syq大神的指点下终于理解一道后缀自动姬了quq (其实是因为这道题的dp主要是在后缀树(就是拓扑序)上搞树形 ...
- Js 分别取一个数的百位,十位,个位
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- php 页面调转导致session丢失解决方法
例如在a页面设置了会话,然后打印会话值,可以成功打印,但是调转到b页面后,会话丢失了. 原因有不少,一个原因就是没有在页面开头加入session_start();当然你也可以直接配置php.ini文件 ...
- webpack基本配置文件
entry(入口文件) 可以传字符串,数组,对象三种格式(字符串和数组默认生成main.js,均生成一个文件,对象有几个入口文件,生成几个文件).默认值为./src/index.js.entry可以传 ...
- ML(7)——支持向量机1(构建支持向量机)
支持向量机缩写是SVM(support vaector machine),这里的“机(machine)”是一个算法.在机器学习领域,常把一些算法看做是一个机器,如感知机(也叫感知器).支持向量机本身是 ...
- vue-cli 2.x 项目优化之:引入本地静态库文件
demo地址:https://github.com/cag2050/vue_cli_optimize_static_resource vue-cli 将静态资源文件放到 static 文件夹下并引用: ...
- vue 和 react 组件间通信方法对比
vue 和 react 组件间通信方法对比: 通信路径 vue的方法 react的方法 父组件 => 子组件 props(推荐).slot(推荐).this.$refs.this.$childr ...
- Jenkins进阶-部署Web项目到远程tomcat(7)
之前讲到的是如何构建一个项目,并且将代码进行编译.打包,那么打包完成最后的结果就需要发布到应用服务器,将项目部署成功.在之前的项目中我们采用的shell脚本来部署,下面讲解通过Jenkins部署web ...
- LOJ 2736 「JOISC 2016 Day 3」回转寿司 ——堆+分块思路
题目:https://loj.ac/problem/2736 如果每个询问都是 l = 1 , r = n ,那么每次输出序列的 n 个数与本次操作的数的最大值即可.可以用堆维护. 不同区间的询问,可 ...
- Anaconda详细安装使用教程
版权声明:本文为博主原创文章,欢迎大家转载,但是要注明我的文章地址. https://blog.csdn.net/program_developer/article/details/79677557 ...