这就是字节序问题:数据在计算机内存中存储或者网络传输时各字节的存储顺序

通常来说就分为两种情况:

一种是大端(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语言之大端小端问题相关推荐

  1. C语言程序设计 | 大端小端存储解析以及判断方法

    当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() {int i = 1;return 0; } 数据在内存中的存放方式似乎 ...

  2. c语言大端存储,c语言 之大端小端存储问题

    我们都知道数据在计算机中的存储是以补码形式存储的.在计算机中,如果数据的高字节内容放在高地址处,低字节内容放在低地址处,我们称它为小端字节序:相反,如果数据的高字节内容放在底地址处,低字节内容放在高地 ...

  3. C 语言判断大端小端

    #include <iostream>using namespace std;bool isBig_Endian(){unsigned short test = 0x1122;int i ...

  4. C语言中低位存放,C语言 大端小端存储解析以及判断方法

    当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() { int i = 1; return 0; } 数据在内存中的存放方式 ...

  5. 字符编码方式及大端小端

    参考资料: http://www.cnblogs.com/zhouyuqin/p/4688459.html http://pcedu.pconline.com.cn/empolder/gj/other ...

  6. 栈增长方向与大端/小端问题

    转:http://www.cnblogs.com/xkfz007/archive/2012/06/22/2558935.html 栈增长和大端/小端问题是和CPU相关的两个问题. 在内存管理中,与栈对 ...

  7. 大端小端模式(俗称大尾小尾模式)

    转自百度百科 http://baike.baidu.com/link?url=uKVPtSaiXzEAXJSHfiya1Wj_oITw-t8MpHkJxJvMb0Eu_WXo28czAHLY-FOqj ...

  8. Unicode编码与大端小端

    大端小端区别: 举例: 一个4字节的整型数据 0x12345678 高字节是0x12, 低字节是0x78,这个不用多说吧 存储地址假设为0x00000000 0x00000001 0x00000002 ...

  9. socket 大端 小端 转换 (转)《二》

    http://blog.csdn.net/kukumouse/article/details/2270356 (1)对于位域结构中的变量来说,其长度不能跨越字节,也就是说不能超过8位.当然如果设置空白 ...

最新文章

  1. 【深度学习入门到精通系列】使用Plotly绘制气泡图(以U-Net等网络性能比较为例)
  2. Docker安装及基本使用
  3. tensorflow分类的loss函数_tensorflow 分类损失函数使用小记
  4. 11 二叉查找树中搜索区间
  5. Linux C++使用MySQL数据库
  6. 查看php-fpm进程数_查看php-fpm开启的进程数以及每个进程的内存限制
  7. 小学计算机图形组合教案,小学三年级信息技术下册组合图形名师公开课优质教案人教版...
  8. ST-Link下载 KELL5程序下载 STM32程序下载
  9. 二、量子通信与量子加密
  10. ffmpeg 推流 m3u8 播放 EasyDarwin 存储录像和播放
  11. 初探Freebase和Wikidata的转换
  12. 四则运算之Right-BICEP单元测试
  13. js 中日期 转换成时间戳 例如2013-08-30 转换为时间戳
  14. 位居榜首 | 未来智安荣登CCIA「2022年中国网安产业潜力之星」榜单
  15. P1108 低价购买(DP)
  16. 前端-js网页特效(一)倒计时效果及原理
  17. 异步FIFO基本原理(基于Verilog的简单实现)
  18. android 自定义热点区,Android 自定义View之中国地图热点区域分布
  19. 未来的房子果真“白菜价”,当代青年应以何种心态面对买房
  20. excel中使用Vlookup和数据透视表

热门文章

  1. 如何让编程学习不再枯燥乏味?
  2. 2017最全的php面试题目及答案总结
  3. android 显示电池电量
  4. 受保护的PDF如何解决
  5. 应用数学计算机数学,应用数学/计算数学申请总结,Columbia OFFER
  6. Java学习路线-42:SQL进阶:约束、关系、连接
  7. QuickERM仲跻亮:教育行业O2O可以这么玩
  8. PyTorch:学习conv1D,conv2D和conv3D
  9. “FME 博客周年庆--IPAD欢乐送”活动结束通知
  10. 【问】数据库服务无法启动