c语言之大端小端问题
这就是字节序问题:数据在计算机内存中存储或者网络传输时各字节的存储顺序
通常来说就分为两种情况:
一种是大端(big-endian):高字节(高位)存放在低地址,低字节(低位)存在高地址
另外一种小端(little-endian):高位存放在高地址,低位存放在低地址
这里先来说一下,数据采用大端还是小端与cpu,系统,硬件参数有很大关系,不管什么编程语言,数据都有可能采用大端或者小端来存放,一般来说windows,linux,手机,平板都是采用小端来存存放数据,这种数据存储方式有利用寻址并且数据改写。
下面具体来说一下小端、大端怎么来存放。
假设现在有一个数据,int num = 1;大家都知道,int 是占用四个字节的,那么对于num来说,它的在内存中的二进制表示就是:
现在来说大端、小端是如何存放的:
下面用代码来验证一下:
代码其实很简单,上面下了一个断点,我们来获取地址,直观去看一下内存数据如何存放
跳转到上面这个内存地址:
我这里是选择的一列按照十六进制显示:
观察一下0x0028FE0C这个起始地址,存放的是01这样的十六进制数据,那么换成二进制,四个二进制数据对应一个十六进制数据,就是00000001,也就是低位存放在低地址,按照小端存放。
那么我们换一种方式去看看linux系统又是按照什么方式存储数据
demo.c
#include <stdio.h>
#include <stdlib.h>int main()
{int num1 = 1;char *p_num1 = (char*)&num1;int i = 0;for(;i < 4;i++) {//指针的加减是前进相应的数据类型//比如p_num1+i就会往前走char类型的长度printf("%p %d\n",p_num1+i,*(p_num1+i));}return 0;
}
运行结果:
上面我就用了一个char 类型的指针指向了int类型数据的地址起始,为什么char,不用int,因为如果用int,一旦+1,就会指向int这个数据类型的末尾。
上面我们也可以看出,linux也是按照小端字节存放的。
下面我们来说一下java怎么来判断是小端还是大端。
java由于无法操作内存,我们直接调用一个类里面的方法即可
上代码:
package pxx;import java.nio.ByteOrder;public class Demo1 {public static void main(String[] args) {ByteOrder byteOrder = ByteOrder.nativeOrder();System.out.println(byteOrder);}
}
运行结果:
OK,说到这
c语言之大端小端问题相关推荐
- C语言程序设计 | 大端小端存储解析以及判断方法
当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() {int i = 1;return 0; } 数据在内存中的存放方式似乎 ...
- c语言大端存储,c语言 之大端小端存储问题
我们都知道数据在计算机中的存储是以补码形式存储的.在计算机中,如果数据的高字节内容放在高地址处,低字节内容放在低地址处,我们称它为小端字节序:相反,如果数据的高字节内容放在底地址处,低字节内容放在高地 ...
- C 语言判断大端小端
#include <iostream>using namespace std;bool isBig_Endian(){unsigned short test = 0x1122;int i ...
- C语言中低位存放,C语言 大端小端存储解析以及判断方法
当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() { int i = 1; return 0; } 数据在内存中的存放方式 ...
- 字符编码方式及大端小端
参考资料: http://www.cnblogs.com/zhouyuqin/p/4688459.html http://pcedu.pconline.com.cn/empolder/gj/other ...
- 栈增长方向与大端/小端问题
转:http://www.cnblogs.com/xkfz007/archive/2012/06/22/2558935.html 栈增长和大端/小端问题是和CPU相关的两个问题. 在内存管理中,与栈对 ...
- 大端小端模式(俗称大尾小尾模式)
转自百度百科 http://baike.baidu.com/link?url=uKVPtSaiXzEAXJSHfiya1Wj_oITw-t8MpHkJxJvMb0Eu_WXo28czAHLY-FOqj ...
- Unicode编码与大端小端
大端小端区别: 举例: 一个4字节的整型数据 0x12345678 高字节是0x12, 低字节是0x78,这个不用多说吧 存储地址假设为0x00000000 0x00000001 0x00000002 ...
- socket 大端 小端 转换 (转)《二》
http://blog.csdn.net/kukumouse/article/details/2270356 (1)对于位域结构中的变量来说,其长度不能跨越字节,也就是说不能超过8位.当然如果设置空白 ...
最新文章
- 【深度学习入门到精通系列】使用Plotly绘制气泡图(以U-Net等网络性能比较为例)
- Docker安装及基本使用
- tensorflow分类的loss函数_tensorflow 分类损失函数使用小记
- 11 二叉查找树中搜索区间
- Linux C++使用MySQL数据库
- 查看php-fpm进程数_查看php-fpm开启的进程数以及每个进程的内存限制
- 小学计算机图形组合教案,小学三年级信息技术下册组合图形名师公开课优质教案人教版...
- ST-Link下载 KELL5程序下载 STM32程序下载
- 二、量子通信与量子加密
- ffmpeg 推流 m3u8 播放 EasyDarwin 存储录像和播放
- 初探Freebase和Wikidata的转换
- 四则运算之Right-BICEP单元测试
- js 中日期 转换成时间戳 例如2013-08-30 转换为时间戳
- 位居榜首 | 未来智安荣登CCIA「2022年中国网安产业潜力之星」榜单
- P1108 低价购买(DP)
- 前端-js网页特效(一)倒计时效果及原理
- 异步FIFO基本原理(基于Verilog的简单实现)
- android 自定义热点区,Android 自定义View之中国地图热点区域分布
- 未来的房子果真“白菜价”,当代青年应以何种心态面对买房
- excel中使用Vlookup和数据透视表