数据转换-位串字节数组

代码如下:

main.c

#include<stdio.h>

#include"utils.h"

int main(){

  char ba[100];

  char bs[100];

  printf("input ByteArr:\n");

  scanf("%s",ba);

  ByteArr2BitStr(ba,bs);

  printf("bitstr:\n");

  printf("%s\n",bs);

  char baa[100];

  char bss[100];

  printf("input bitstr:\n");

  scanf("%s",bss);

  BitStr2ByteArr(bss,baa);

  printf("ByteArr:\n");

  printf("%s\n",baa);

  return 0;

}

utils.c

#include<stdio.h>

#include<string.h>

#include"utils.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("error");

     }

    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("error");

        }

        return 0;

}

int ByteArr2BitStr(char *ba,char *bs)

{

    int i,j,L,k,a;

    L = strlen(ba);

    for(j=0;j<L;j++)

    {

        Char2Hex(ba[j],&a);

        for(i=0;i<4;i++)

        {

            bs[3*(j+1)-i+j] = a%2+'0';

            a=a/2;

        }

    }

    bs[4*L]='\0';

}

int BitStr2ByteArr(char *bs,char *ba){

   int i,k,j,L;

   L = strlen(bs);

   char string[100];int sum=0;

   if(L%4==1)

   {

     strcpy(string,"000");

     strcat(string,bs);

     k=L/4+1;

   }

   else if(L%4==2)

   {

     strcpy(string,"00");

     strcat(string,bs);

     k=L/4+1;

   }

    else if(L%4==3)

   {

      strcpy(string,"0");;

      strcat(string,bs);

      k=L/4+1;

   }

   else

   {

       k=L/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';

}

utils.h

#ifndef _UTILS_H_

#define _UTILS_H_

int ByteArr2Bitstr(int ba,int * bs);

int Bitstr2ByteArr(int * bs,int ba);

#endif

代码运行截图:

 

 

posted @ 2022-06-02 15:05  张灯结彩,潇潇暮雨  阅读(38)  评论(0编辑  收藏  举报