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

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

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
根据输出结果,说明我的电脑内存是小端
计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。
  所以,计算机的内部处理都是小端字节序。
但是,人类还是习惯读写大端字节序。
  所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,
  比如网络传输和文件储存
*************************************************/
目录
相关文章
|
算法 计算机视觉 异构计算
目标检测的Tricks | 【Trick7】数据增强——Mosaic(马赛克)
目标检测的Tricks | 【Trick7】数据增强——Mosaic(马赛克)
3725 0
目标检测的Tricks | 【Trick7】数据增强——Mosaic(马赛克)
|
6月前
|
人工智能 关系型数据库 分布式数据库
手把手搭本地 RAG!用阿里云 PolarDB、Lindorm+Ollama,数据隐私全自己把控
教你用阿里云PolarDB和Lindorm存向量,Ollama跑本地大模型,LangChain串联流程,打造数据不出私网的离线智能问答系统,安全、省钱、可私有化部署,新手也能快速上手!
553 1
|
8月前
|
人工智能 自动驾驶 大数据
“AI再聪明,也得靠大数据喂饱它”:聊聊大数据与人工智能的双剑合璧
“AI再聪明,也得靠大数据喂饱它”:聊聊大数据与人工智能的双剑合璧
400 2
|
9月前
|
存储 机器学习/深度学习 编解码
《神经渲染变局:高斯泼溅能否改写NeRF规则》
3D高斯泼溅(Gaussian Splatting)作为新兴神经渲染技术,采用基于高斯分布的场景表示方法,大幅降低计算复杂度,实现实时高效渲染。相比NeRF,它在实时性、内存管理和细节控制方面优势显著,尤其适用于VR、AR和实时游戏等领域。尽管NeRF在高精度静态场景渲染中仍具优势,但3D高斯泼溅凭借其技术特性,有望在更多实时交互场景中替代NeRF,成为主流解决方案。随着技术进步,其渲染质量和细节表现将进一步提升,推动计算机图形学领域的新发展。
377 3
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
1625 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
Java
Java强制类型转换需要注意的点
在 Java 中,强制类型转换(显式类型转换)用于将一种数据类型转换为另一种。然而,这一过程需谨慎处理以避免以下问题:数据丢失,尤其是在从大范围类型转换到小范围类型时;类型不兼容,如 `String` 无法直接转换为 `int`;对象类型转换时应确认实际类型与目标类型兼容,可借助 `instanceof` 运算符;处理基本类型与包装类之间的自动装箱和拆箱时需注意 `null` 值;浮点数转整数时会截断小数部分;字符转整数则得到 Unicode 值。充分理解这些注意事项有助于避免运行时错误和数据不一致。
536 16
|
存储 设计模式 缓存
从一个 NullPointerException 探究 Java 的自动装箱拆箱机制
这行代码一个对象方法都没有调用,怎么会抛出 NullPointerException 呢?
187 9
|
存储 自然语言处理 数据库
Elasticsearch倒排索引
【11月更文挑战第2天】
293 1
|
Web App开发 缓存 Linux
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
《FFmpeg开发实战》书中第10章提及轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适合生产环境。推荐使用SRS或ZLMediaKit,其中SRS是国产开源实时视频服务器,支持多种流媒体协议。本文简述在华为欧拉系统上编译安装SRS和FFmpeg的步骤,包括安装依赖、下载源码、配置、编译以及启动SRS服务。此外,还展示了如何通过FFmpeg进行RTMP推流,并使用VLC播放器测试拉流。更多FFmpeg开发内容可参考相关书籍。
1147 2
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
|
存储 缓存 调度
FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频
《FFmpeg开发实战》第10章示例playsync.c在处理音频流和视频流交错的文件时能实现同步播放,但对于分开存储的格式,会出现先播放全部声音再快速播放视频的问题。为解决此问题,需改造程序,增加音频处理线程和队列,以及相关锁,先将音视频帧读入缓存,再按时间戳播放。改造包括声明新变量、初始化线程和锁、修改数据包处理方式等。代码修改后在playsync2.c中,编译运行成功,控制台显示日志,SDL窗口播放视频并同步音频,证明改造有效。
463 0
FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频