大端 小端?

news/2024/7/7 22:28:50

前言

这个问题也是一个困扰我很久的问题,最近看到了就决定拎出来用自己的理解讲一遍。对应CSAPP的2.1.3章 寻址和字节顺序

我的比喻

就是书上印满了字(计算机里存满了binary的数据,这些数据8bit为1byte地存放,就是有很多个byte,很多个字)。那么我们在读书的时候,究竟是从左往右读呢,还是从右往左读呢?

大端法: 苹果 

小端法: 果苹

书上的例子

举一个具体的例子,一个数是  0x 01 23 45 67, 放在地址0x100的地方

地址0x1000x1010x1020x103
大端法01234567
小端法67452301

最低有效字节在最前面的方式,叫小端法(little endian), 下面是一个例子

#include <stdio.h>
#include <stdlib.h>

typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer a, int len) {
int i;
    printf("len=%d\t",len);
	for(i=0; i<len; i++) {
		printf("%x ", a[i]);
	}
	printf("\n");
}


int main(int argv, char** argc) {
	int x = 12345;
    short mx = -x;
    int* p = &x;
	show_bytes((byte_pointer)&x, sizeof(x));   //len=4   39 30 0 0
	show_bytes((byte_pointer)&mx, sizeof(mx)); //len=2   c7 cf
	show_bytes((byte_pointer)&p, sizeof(p));   //len=8   ac ad 3d 5a fe 7f 0 0
	return 0;
}

上面的代码运行,我的输出是

12345 =   39 30    # bianray = 0011 1001 |  0011 0000  

-12345 =  c7 cf    

这个其实是小端的输出结果,我的机器是小端:12345的binary应该是 0b 0011 0000| 0011 1001

最好配个图

应用

  • 反汇编器输出的十六进制 43 0b 20 00 其实是 0x 00 20 0b 43这个地址,要反过来读
  • 网络传输二进制数据,要格式一致 (我的话就是,内容就哪些,你怎么解释,要约定好)
  • 强制类型转换 show_bytes(byte_pointer x,int len), 用sizeof(xxx)来确定对象使用的字节数。需要理解的是计算机的binary不变,改变数据类型只是改变解释这些bianry, 一个例子就是 把一个有符号的负数,强制转换为无符号数, 0x1101 (-3) ,解释为无符号数是 0x1101(13)

 

我的是64bit系统,所以地址(指针的sizeof)会为8


http://lihuaxi.xjx100.cn/news/151713.html

相关文章

基于JAVA的高校宿管理系统

课题现状 随着高校的扩招&#xff0c;随之宿舍的增加&#xff0c;造成管理困难&#xff0c;计算机也随之普遍&#xff0c;大家也意识到运用计算机对其管理的重要性&#xff0c;对于复杂的信息管理&#xff0c;对于高校来讲学生宿舍工作涉及信息量较多&#xff0c;手工存在很大的…

功率放大器的作用和工作原理是什么

很多人都听说过功率放大器&#xff0c;但是对功率放大器的工作原理等了解的还是不够&#xff0c;今天安泰电子就来给大家做个科普&#xff0c;为大家带来这篇文章详细的解释功率放大器的工作原理和作用是什么内容。 高压功率放大器可以驱动高压型负载。电压增益数控可调&#x…

java计算机毕业设计vue基层社区管理服务网源码+mysql数据库+系统+lw文档+部署

java计算机毕业设计vue基层社区管理服务网源码mysql数据库系统lw文档部署 java计算机毕业设计vue基层社区管理服务网源码mysql数据库系统lw文档部署本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea eclipse …

Ubuntu16.04搭建UbertoothOne环境

Ubuntu16.04搭建UbertoothOne环境 【支持原创&#xff0c;转载需经过作者同意&#xff0c;否则追究相关责任】 相关链接 ubertoothone 主页ubertoothone github 环境说明 操作系统&#xff1a;Ubuntu 16.04.3 LTSUbertooth软件版本&#xff1a;ubertooth 2020-12-R1Libbtb…

全球创见者共话企业韧性 金蝶“数字员工”惊艳亮相

11月11日&#xff0c;由云南省昆明市人民政府、云南省工信厅指导&#xff0c;金蝶集团主办的“2022全球创见者大会”成功举办。大会以“数治企业 韧性成长”为主题&#xff0c;求索不确定时代&#xff0c;如何以“数”治企&#xff0c;用EBC治理和管理企业&#xff0c;实现韧性…

前端基础之《Bootstrap(12)—JavaScript插件_滚动监听、侧边栏浮动》

一、滚动监听 滚动文件&#xff0c;监听它的位置&#xff0c;然后有个缩略地图跟着走。一楼&#xff0c;二楼&#xff0c;三楼&#xff0c;四楼&#xff0c;回到顶部。 1、使用导航条面板组合 2、滚动监听&#xff0c;滚动区域就是监听的区域 监听的是整个body区域。 &#…

【重识云原生】第六章容器基础6.4.9.3节——Service拓扑感知

1 拓扑感知 1.1 使用拓扑键实现拓扑感知的流量路由特性状态 Kubernetes v1.21 [deprecated] 说明&#xff1a; 此功能特性&#xff0c;尤其是 Alpha 阶段的 topologyKeys API&#xff0c;在 Kubernetes v1.21 版本中已被废弃。Kubernetes v1.21 版本中引入的 拓扑感知的提示…

Unity AVPro Video使用和WebGL播放视频流

1.创建Media Player对象。在Hierarchy视图右击 Video->Media Player 或者选择菜单栏的GameObject菜单&#xff0c;然后选择 Video->Media Player。 2.创建Display uGui对象。在Hierarchy视图右击 UI->Display uGui 或者选择菜单栏的Component菜单 AVPro Video->D…