1. 有关大小端序,及二进制转换的工具集:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/**
* 短整型数的大小端序互换
* 目前X86及ARM的默认是:小端序,如short m=1的形式:00000001 00000000
* 互换后:00000000 00000001
**/
short short_endian_change(short m){
int len=(int)sizeof(m);
char *mp=(char *)&m;
mp+=(len-1);
short n=0;
char *np=(char *)&n;
for(int i=0;i<len;i++){
*(np++)=*(mp--);
}
return n;
}
/**
* 整型数的大小端序互换
* 目前X86及ARM的默认是:小端序,如int m=1的形式:00000001 0~共24个
**/
int int_endian_change(int m){
//获取待转换数的长度
int len=(int)sizeof(m);
//生成char指针,并指向到m的最后一个字节
char *mp=(char *)&m;
mp+=(len-1);
// 生成一个新的整型数据,利用指针的移动完成数据的复制,最后返回新数
int n=0;
char *np=(char *)&n;
for(int i=0;i<len;i++){
*(np++)=*(mp--);
}
return n;
}
/**
* 完成char类型数据的二进制序列生成
**/
char * char_bin(char x)
{
static char s[9];
int z;
s[0]='\0';//利用strcat,会将数据插入到'\0'之前的机制
//利用:1000 0000 的向右移动,再与数据的按位&操作,来判断当前位的1/0判断
for (z = 128; z > 0; z >>= 1)
{
//根据当前位为的1、0追加生成字符串
strcat(s, ((x & z) == z) ? "1" : "0");
}
return s;
}
/**
* 完成short类型数据的二进制序列生成,本函数按大端序显示
* short x 被转换的数据
* char *sp 分隔符,如果不想使用,则传入“”即可
**/
char * short_bin(short x,char *sp)
{
static char s[18];
int z,index=1;
s[0]='\0';
for (z = 1<<15; z > 0; z >>= 1)
{
strcat(s, ((x & z) == z) ? "1" : "0");
if(index%8==0 && index<15) strcat(s,sp);
index++;
}
return s;
}
/**
* 完成int类型数据的二进制序列生成,本函数按大端序显示
* x 被转换的数据
* char *sp 分隔符,如果不想使用,则传入“”即可
**/
char * int_bin(int x,char *sp)
{
static char s[36];
unsigned int z;
int index=0;
s[0]='\0';
for (z = 1<<31; z > 0; z >>= 1)
{
strcat(s, ((x & z) == z) ? "1" : "0");
if((index+1)%8==0 && index<31) strcat(s,sp);
index++;
}
return s;
}
/**
* 使用演示
**/
int main(int argc, char const *argv[])
{
short m=1;
short n=short_endian_change(1);
char *s=short_bin(m,"<-高-低->");
printf("%hd的大端序排列是:%s\n",m,s);
s=short_bin(n,"<-低-高->");
printf("%hd的小端序排列是:%s\n",m,s);
int m1=258;
int n1=int_endian_change(m1);
s=int_bin(m1,"<-高-低->");
printf("%d的大端序排列是:%s\n",m1,s);
s=int_bin(n1,"<-低-高->");
printf("%d的小端序排列是:%s\n",m1,s);
return 0;
}
运行结果:
1的大端序排列是:00000000<-高-低->00000001
1的小端序排列是:00000001<-低-高->00000000
258的大端序排列是:00000000<-高-低->00000000<-高-低->00000001<-高-低->00000010
258的小端序排列是:00000010<-低-高->00000001<-低-高->00000000<-低-高->00000000
网友评论