数据转换-位串字节数组

代码

utils.h

#ifndef UTILS_H
#define UTILS_H
 
int BitStr2ByteArr(char *bs,char *ba,int lbs);
int ByteArr2BitStr(char *ba,char *bs,int lba);
#endif

utils.c

#include<stdio.h>
#include"utils.h"
#include<string.h>
int Hex2Char(int f,char *x)
{
    if(f>=0&&f<=9)
    {
        *x= f+'0';
    } 
    else if(f>=10&&f<=15)
    {
        *x = f+'A'-10;
    }
    else
    {
        printf("input error!");
     }
    return 0;
}
int Char2Hex(char f,int *x2)
{
    if(f>='0'&& f<='9')
    {
             *x1= f-'0';
    }
    else if(f>='A'&& f<='F')
    {
             *x1= f-'A'+10;
    
        }
        else 
        {
            printf("input error!");
        }
    return 0;
}
 
int ByteArr2BitStr(char *ba,char *bs,int len)
{
    int i,j;
    int k;
    int a;
    for(j=0;j<len;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*lba]='\0';
}
 
int BitStr2ByteArr(char *bs,char *ba,int len)
{
   
   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(){
char bytes[100];
  char bitss[100];
  int len=20191301,
char bytes_1[100];
  char bitss_1[100];
int len1,len2;
int len_1=1000011111111000;
ByteArr2BitStr(bytes,bitss,len);
printf("%s->:%s\n",bitss,bytes);
BitStr2ByteArr(bitss_1,bytes_1,len_1);
printf("%s->:%s\n",bitss_1,bytes_1);
}
posted @ 2022-06-02 14:57  20191301  阅读(17)  评论(0编辑  收藏  举报