大小端学习理解
1.什么是大小端
简单来说:
大端:高位字节放在低地址
小端:低位字节放在低地址
例如:
0x12345678
拆开是四个字12,34,56,78
放在大端小端的地址中:
| 地址 | 0x1000 | 0x1001 | 0x1002 | 0x1003 |
|---|---|---|---|---|
| 大端 | 12 | 34 | 56 | 78 |
| 小端 | 78 | 56 | 34 | 12 |
2.大小端的区别在哪
表达的意思都是相同的,唯一的区别就是读取的顺序不一样,打个比方:
中国人说地点:大地方在前,小地方在后:陕西省西安市
美国人说地点:小地点在前,大地点在后:西安市陕西省
顺序不同,但含义是相同的
3.判断当前机器使用大端还是小端
在编译器中输入这一串代码看输出结果即可(C语言)
#include<stdio.h>intmain(){unsignedintx=0x12345678;unsignedchar*p=(unsignedchar*)&x;printf("%02X %02X %02X %02X\n",p[0],p[1],p[2],p[3]);return0;}4.大小端要注意什么
- 单个字节没有大小端问题 :例如字符串”Hi“不考虑大小端问题
- 大小端不影响数值,只是传字节的顺序不同
- 对整数来说,大小端转换就是整体把字节顺序倒过来
跨平台传输要注意不同平台使用的是大端还是小端,不然会出现传输数据全是反的情况
5.大小端转换(C语言)
- htons() 主机序 → 网络序 16 位
- htonl() 主机序 → 网络序 32 位
- ntohs() 网络序 → 主机序 16 位
- ntohl() 网络序 → 主机序 32 位
主机序:本机所使用的端序,不固定大端还是小端
网络序:固定为大端