首页 > 编程知识 正文

结构体大小端转换,网络大小端

时间:2023-05-04 17:08:20 阅读:168801 作者:4185

大小侧模式介绍大端(存储)模式表示一个数据的低位字节序的内容被置于高位地址,高位字节序的内容被置于低位地址。小端(存储)模式意味着一个数据的低位字节序的内容保存到低位地址,高位字节序的内容保存到高位地址。 在“小”即低位、低地址、小字节序”的计算机系统中,我们以字节为单位存储数据,每个地址单元对应1字节,1字节对应8比特。 但是,在c语言中,由于数据类型不同,使用的字节数也不同,所以存在如何存储多个字节的问题,出现了大端序和小端序的存储模式。

创建整数变量I,在调试时打开调试窗口的内存,输入I,可以在内存窗口中看到变量I存储在内存中的方式。

从图中可以看出,整数变量I是小端序存储模式,因为在内存中,字节顺序的低位内容存储在低地址,字节顺序的高位内容存储在高地址。

因此,可以通过查看低地址保存的内容来判断当前机器的存储模式,请参阅判断当前机器的存储模式

方法1 ) includestdio.hintmain () { int i=1; char*a=(char* ) I; if ) a==1) printf (小端序(n ); else printf (大字节序(n ); 返回0; }

方法2 )共同体由int Check_Sys () { union } inti; char c; (UN; un.i=1; return un.c; //小端序为1,大端序为0}int main () if(check_sys ) ) printf ('小端序(n ' ) ); else printf (大字节序(n ); 返回0; }

上面的共同体变量un,大小sizeof(UN )=4,

注意使用共同体(联合)判断时,不能只将共同体类型最大的作为共同体变量的大小,而必须遵守其原则和补充原则。

对齐原则

结构变量的元素按定义顺序逐个存储在内存中,但并不是紧密排列的。 如果从结构存储器的起始地址开始,将每个元素放置在内存中,则元素的放置位置必须以自己宽度的整数倍开始(以结构变量的起始地址为0计算),因为内存被认为是按自己的大小分割的。

互补原则:

检查计算出的存储单元是否为所有要素中存储器所占最大要素长度的整数倍,如果是,则结束; 否则,补全为整数倍。

举个例子:

union Un{ int i; char arr[5]; (; sizeof(unionun )=8

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。