设计一个代码,可以把int类型数据从小端序转成大端序
1.位移
#include <stdio.h>
//把int类型数据从小端序转成大端序
void main()
{
int n=0x12345678;
char *p=(char *)&n;
printf("小端序:%#x\n",n);
n=(*p)<<24|(*(p+1))<<16|(*(p+2))<<8|(*(p+3));
printf("大端序:%#x\n",n);
}
2.交换
#include <stdio.h>
union endian//共用体(联合体)
{
char a[4];
int b;
}big;
//把int类型数据从小端序转成大端序
int big_endian(int n)
{
char temp;
big.b=n;
//第1字节与第4字节交换
temp=big.a[0];
big.a[0]=big.a[3];
big.a[3]=temp;
//第2字节与第3字节交换
temp=big.a[1];
big.a[1]=big.a[2];
big.a[2]=temp;
return big.b;
}
void main()
{
int n=0x12345678;
printf("小端序:%#x\n",n);
n=big_endian(n);
printf("大端序:%#x\n",n);
}
大小端(字节序)
大小端:用来描述计算机中数据的存储方式 //int a=0x12345678;12->高字节,78->低字节
大端序:数据的高字节存放到低地址,低字节存放到高地址 //78563412
小端序:数据的高字节存放到高地址,低字节存放到低地址 //12345678
ubuntu采用小端序存放
计算机网络传输数据的时候采用大端序
共用体(也叫做联合体)
union 共用体的名字
{
成员;
};
写法一:
typedef union sex
{
char man;
char woman;
}Sex; //Sex是联合体类型的别名
写法二:
union sex
{
char man;
char woman;
}Sex; //Sex是联合体变量的名字
(1)用法
普通联合体变量: 用小数点
联合体指针: 用->
(2)特点
联合体中所有的成员公用同一块内存区域,联合体的大小由最大的成员大小来决定,也要满足字节对齐
union m1
{
char a[11];//11字节-->对齐后12字节
int b; //int类型4字节;与a[0],a[1],a[2],a[3]共用内存
};
union m2
{
double a;//
int b;//与a的低4字节,c[0],c[1],c[2],c[3]共用内存
char c[9];//c[0]~c[7]与a共用内存
};
实际中的用法
用来表示互斥的变量(多选一)
union workenv
{
int n1;
int n2;
int n3;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)