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;
}






posted @ 2022-06-02 14:32  20191229XYZ  阅读(60)  评论(0)    收藏  举报