6.3课上测试
utils.h:
#ifndef UTILS_H
#define UTILS_H
int Hex2Char(int fromi,char *toc);//16进制转换为字符串
int Char2Hex(char fromc,int *toi);//字符串转换为十进制
int BitStr2ByteArr(char *bs,char *ba);//位串转换为8位字节串
int ByteArr2BitStr(char *ba,char *bs);//8位字节串转换为位串
#endif
utils.c:
#include<stdio.h>
#include"utils.h"
#include<string.h>
int Hex2Char(int fromi,char *toc)
{
if(fromi >= 0 && fromi <= 9)
{
*toc = fromi+'0';
}
else if(fromi >= 10 && fromi<= 15)
{
*toc = fromi + 'A' -10;
}
else
{
printf("输入错误!");
}
return 0;
}
int Char2Hex(char fromc,int *toi)
{
if(fromc >= '0' && fromc <= '9')
{
*toi = fromc - '0';
}
else if(fromc >= 'A' && fromc <= 'F')
{
*toi = fromc - 'A' +10;
}
else
{
printf("输入错误");
}
return 0;
}
int ByteArr2BitStr(char *ba,char *bs) //8位字节串转换为位串
{
int i,j;
int len;
int k;
int a;
len = strlen(ba);
for(i=0;i<len;i++)
{
Char2Hex(ba[i],&a);
for(j=0;j<4;j++)//4位
{
bs[3*(i+1)-j+i] = a%2+'0';
a=a/2;
}
}
bs[4*len]='\0';
}
int BitStr2ByteArr(char *bs,char *ba) //位串转换为8位字节串
{
int len;
len = strlen(bs);
char string[100];
int k;
int i;
int j;
int sum=0;
if(len%4==1)
{
strcpy(string,"000");
strcat(string,bs);
k=len/4+1;
}
else if(len%4==2)
{
strcpy(string,"00");
strcat(string,bs);
k=len/4+1;
}
else if(len%4==3)
{
strcpy(string,"0");
strcat(string,bs);
k=len/4+1;
}
else
{
k=len/4;
strcpy(string,bs);
}
for(i=0;i<k;i++)
{
for(j=0;j<4;j++)
{
sum=sum*2;
sum=sum+(string[4*i+j]-'0');
}
Hex2Char(sum,&ba[i]);
sum=0;
}
ba[i]='\0';
}
main.c:
#include<stdio.h>
#include"utils.h"
int main()
{
//8位字节串转换为位串
char ByteArr[100];
char BitStr[100];
printf("请输入16进制数:\n");
scanf("%s",ByteArr);
ByteArr2BitStr(ByteArr,BitStr);
printf("转换后的位串为:\n");
printf("%s",BitStr);
//位串转换为8位字节串
char ByteArr2[100];
char BitStr2[100];
printf("请输入位串(例:010111):\n");
scanf("%s",BitStr2);
printf("转换后的16进制字节数:\n");
BitStr2ByteArr(BitStr2,ByteArr2);
printf("%s",ByteArr2);int a = strlen(ByteArr2); printf("len =%d\n",a);
return 0;
}

浙公网安备 33010602011771号