计算机存储,字节分为大端和小端

简介: 计算机存储,字节分为大端和小端

1:认识

对于一个int类型的数字,如int data=0x01234567; 最高位是0x01 最低位是 0x67

大端存储: 高位字节排在内存的低地址,低位字节排在内存的高地址端 ==》符合我们的阅读

小端存储:低位字节排在内存的低地址 高位字节排在内存的高地址端 ==》计算机电路先处理低位字节,效率较高

2:demo

//测试本机是大端还是小段:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
int main()
{
  int data=0x01234567;   //高字节是0x01 
  //以十六进制输出数据 及该数据对应的地址
  printf("data:[%x] data_addr:[%p] \n",data, &data);
  char *c_data = (char *)&data;
  for(int i=0; i<4;i++)
  {
    printf("addr[%p]==>%x \n", c_data+i, *(c_data+i));
  }
  //高位字节排在内存的低地址,低位字节排在内存的高地址端 为大端
  //低位字节排在内存的低地址  高位字节排在内存的高地址端 为小端
  if(*c_data == 0x01)  //低位存高字节
  {
    printf("this is big endian\n");
  }else{   //低位存低字节
    printf("this is little endian\n");
  }
  //字节序的转换
  data = htonl(data);
  printf("data is :%x data_addr:[%p] \n", data, &data);
  for(int i=0; i<4;i++)
  {
    printf("addr[%p]==>%x \n", c_data+i, *(c_data+i));
  }
  return 0;
}
/*************************************************
hlp@ubuntu:~/0922$ ./big
data:[1234567] data_addr:[0x7ffcd98f44a8] 
addr[0x7ffcd98f44a8]==>67 
addr[0x7ffcd98f44a9]==>45 
addr[0x7ffcd98f44aa]==>23 
addr[0x7ffcd98f44ab]==>1
根据输出结果,说明我的电脑内存是小端
计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。
  所以,计算机的内部处理都是小端字节序。
但是,人类还是习惯读写大端字节序。
  所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,
  比如网络传输和文件储存
*************************************************/
目录
相关文章
|
Android开发 iOS开发 开发者
windows打包uniapp应用p12证书和证书profile文件的制作方法
uniapp打包app,无论是android还是ios,都需要证书。其中ios打包最麻烦,需要p12证书和证书profile文件。而uniapp官网的教程,创建p12证书需要苹果电脑,这里我们不用uniapp官网推荐的教程。因为我们大部分用户使用的是windows电脑,没必要因为打包一个ios应用花7K买一台mac电脑。
1560 0
windows打包uniapp应用p12证书和证书profile文件的制作方法
|
11月前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
1071 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
10月前
|
负载均衡 网络协议 数据库
选择适合自己的数据库多实例负载均衡技术
【10月更文挑战第23天】选择适合自己的数据库多实例负载均衡技术需要全面考虑多种因素。通过深入的分析和评估,结合自身的实际情况,能够做出明智的决策,为数据库系统的高效运行提供有力保障。
228 61
|
Java
Java强制类型转换需要注意的点
在 Java 中,强制类型转换(显式类型转换)用于将一种数据类型转换为另一种。然而,这一过程需谨慎处理以避免以下问题:数据丢失,尤其是在从大范围类型转换到小范围类型时;类型不兼容,如 `String` 无法直接转换为 `int`;对象类型转换时应确认实际类型与目标类型兼容,可借助 `instanceof` 运算符;处理基本类型与包装类之间的自动装箱和拆箱时需注意 `null` 值;浮点数转整数时会截断小数部分;字符转整数则得到 Unicode 值。充分理解这些注意事项有助于避免运行时错误和数据不一致。
280 16
|
10月前
|
存储 自然语言处理 数据库
Elasticsearch倒排索引
【11月更文挑战第2天】
180 1
|
11月前
|
存储 设计模式 缓存
从一个 NullPointerException 探究 Java 的自动装箱拆箱机制
这行代码一个对象方法都没有调用,怎么会抛出 NullPointerException 呢?
108 9
|
存储 缓存 调度
FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频
《FFmpeg开发实战》第10章示例playsync.c在处理音频流和视频流交错的文件时能实现同步播放,但对于分开存储的格式,会出现先播放全部声音再快速播放视频的问题。为解决此问题,需改造程序,增加音频处理线程和队列,以及相关锁,先将音视频帧读入缓存,再按时间戳播放。改造包括声明新变量、初始化线程和锁、修改数据包处理方式等。代码修改后在playsync2.c中,编译运行成功,控制台显示日志,SDL窗口播放视频并同步音频,证明改造有效。
273 0
FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频
|
机器学习/深度学习 人工智能 机器人
「AIGC」DALL-E2详解
**DALL-E 2是OpenAI的文本到图像生成器,融合艺术与技术,通过文本编码、先验模块和图像解码创新性地将描述转化为视觉作品。它能理解抽象概念,生成多样化、高质量图像,应用于艺术、设计及媒体行业。然而,细节处理有限且涉及伦理挑战。**
613 0
|
BI 开发者 数据格式
Python代码填充数据到word模板中
【4月更文挑战第16天】
496 0
|
存储 缓存 Linux
音频播放的一些整理
音频播放的一些整理
312 1