大小端模式
来源:互联网 发布:手机淘宝设置在哪 编辑:程序博客网 时间:2024/06/18 18:29
大小端模式
什么是大小端模式
1)大端模式,小端模式
2)通信协议中,发送方和接收方必须按同样的字节顺序来通信,否则会出错。
常见的,在socket通信中,常用到的函数:hton(),定义端口号或者ip地址时,需要考虑字节序。
3)除了通信协议,在计算机存储系统中也有大小端
一个32位的2进制在内存中存储时有两种发布方式:
图示如下:高字节 对应 高地址 --------------> 小端模式
高字节 对应 低地址 --------------> 大端模式
大小端存在的意义
1)在通信协议中,大小端模式是非常重要的。
2)在实际中,有些CPU用的是大端,有些则是小端,如不加以区别的话,可能会出现读取时和储存时字节顺序不一致的情况,从而造成数据的错误。
3)网络通信中一般为大端模式,常用计算机CPU为小端模式。
如何判断
用共用体union或指针可以测试出
共用体union测试
union myunion{ int a; char b;};//int is_little(void){ union myunion u1; u1.a = 1; return u1.b;}int main(int argc, const char * argv[]) { // insert code here... int i = is_little(); if (i == 1) { printf("little\n"); }else{ printf("big\n"); } return 0;}图示如下:
共用体union与结构体struct
1)在定义和用法上很相似:
struct mystruct{ int a; char b;};union myunion{ int a; char b; long c; int d[10];};int main(int argc, const char * argv[]) { // insert code here... struct mystruct s1; s1.a = 23; printf("s1.b = %d\n", s1.b); // s1.b = 0 union myunion u1; u1.a = 23; printf("u1.b = %d\n", u1.b); // u1.b = 23 printf("u1.a地址 = %p\n", &u1.a); // u1.a地址 = 0x7fff5fbff7b0 printf("u1.b地址 = %p\n", &u1.b); // u1.b地址 = 0x7fff5fbff7b0 // 说明u1.a和u1.b是共用的 return 0;}
2)不同之处:
① 结构体中的成员是相互独立的
② 共用体中的成员是一体的,彼此是不独立的,共使用同一个内存单元。
共用体因为只有一个共用的空间,所以不存在内存对齐的问题
union的大小为成员中最大的那个的大小
指针方式测试
int is_little(void){ int a = 1; char b = *((char *)(&a)); return b;}int main(int argc, const char * argv[]) { // insert code here... int i = is_little(); if (i == 1) { printf("little\n"); }else{ printf("big\n"); } return 0;}
阅读全文
0 0
- 大小端模式
- 大小端模式
- 大小端模式
- 大小端模式
- 大小端模式判断
- 大小端模式
- 大小端模式
- 大小端存储模式
- 大小端模式判别
- 大小端模式
- 大小端模式判断
- 大小端模式
- 大小端模式详解
- 大小端模式
- 大小端模式
- 大小端模式
- 大小端模式
- 大小端模式
- [HDU 6093] Rikka with Number
- SAP_BW建模第二步之创建数据源(Data Source)
- [BZOJ][替罪羊树]3224 普通平衡树
- Excel在统计分析中的应用—第六章—概率分布及概率分布图-Part5-离散型概率分布(泊松分布函数POISSON.DIST()的应用)
- Cookie和Session的区别
- 大小端模式
- 骨折愈合
- 啥是eMarketer公司
- 欢迎使用CSDN-markdown编辑器
- 我的实现_登录功能
- 【图论·强连通分量scc】hdu6072Logical Chain
- C语言的枚举与宏定义
- Struts2配置详解
- 用Runtime实现KVO