数据转换-位串字节数组
0. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务 1 参考《GMT 0009-2012 SM2密码算法使用规范》第6节“数据转换” 在utils.h和utils.c中完成位串与8位字节串的转换功能(10'): int Bitstr2ByteArr(unsigned char * bs, unsigned char * ba,int *lba); int ByteArr2Bitstr(unsigned char * ba, unsigned char * bs, int *lbs); 2 并写出测试代码测试上述函数(不能与下面代码一样),比如(10'): unsigned char bs [] = "1010010100011100"; int len; Bitstr2ByteArr(bs, char * ba, &len); //结果:ba = {0x5, 0x1C}; len=2 char ba[] = {0x5, 0x1C} ByteArr2Bitstr(char * ba, char * bs); //结果:bs= "1010010100011100" 3 提交代码(或代码链接)和运行结果
mian.c
#include <stdio.h>
#include "utils.h"
void main(){
char ba1[] = "1325";
char bs1[] = "1100110000110100";
char bs2[100];
char ba2[100];
ByteArr2Bitstr(ba1,bs2);
}
utils.c
#include <stdio.h>
#include <string.h>
#include "utils.h"
char Hex2Char(int i){
if(i>=0 && i<= 9)
return i + 0x30;
// return i + '0'
if(i>=10 && i<=15)
return i + 0x37;
//return i + 'A' - 10;
}
int Char2Hex(char x){
if(x>48&&x<58)
return x-48;
if(x>65&&x<75)
return x - 55;
}
void B2Arr(char bs[],char ba[])
{
printf("1");
int b1,b2,b3,b4,b5,i;
for(i = 0;i<strlen(bs);i+4)
{b1 = Char2Hex(bs[i]);
b2 = Char2Hex(bs[i + 1]);
b3 = Char2Hex(bs[i+2]);
b4 = Char2Hex(bs[i + 3]);
b5 = b1*8 + b2*4 + b3*2 + b4*1;
ba[i/4] = Hex2Char(b5);
}
printf("%s转化为%s\n",bs,ba);
return 0;
}
void ByteArr2Bitstr(char ba[],char bs[], int *lba)
{
int b1,b2,b3,b4,b5,i;
for (i = 0;i<strlen(ba);i++)
{b5 = Char2Hex(ba[i]);
b1 = b5/8;
b2 = (b5-b1*8)/4;
b3 = (b5-b1*8 -b2*4)/2;
b4 = b5%2;
bs[i*4] = Hex2Char(b1);
bs[i*4+1] = Hex2Char(b2);
bs[i*4+2] = Hex2Char(b3);
bs[i*4+3] = Hex2Char(b4);
}
printf("%s转化为%s\n",ba,bs);
}
utils.h
#ifndef _UTILS_H_ #define _UTILS_H_ int ByteArr2Bitstr(int ba[],int bs[],int *lba);
int Bitstr2ByteArr(int bs[],int ba[],int *lbs);
#endif
运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通