数据转换-位串字节数组

1|0数据转换-位串字节数组

  1. 在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 提交代码(或代码链接)和运行结果

1|0main.c

#include <stdio.h>
#include <string.h>
#include "utils.h"
int main(){
int bitList[8] = { 0 };
int a;
sscanf("20191227", "%x", &a);
ByteArr2Bitstr(a, bitList);
printf("0x20191227 be changed to\n");
for (int i =0 ;i<32;++i)
printf("%i",bitList[i]);//八位长
printf("\n");
int b,n;
n=Bitstr2ByteArr(bitList,b);
printf("the data will be changed to\n");
printf("%x\n",n);
}

1|0utils.c

#include <stdio.h>
#include <string.h>
#include "utils.h"
int ByteArr2Bitstr(int ba,int * bs){
for (int i =0 ;i<8;++i)
{
int nTmp = (1 << i);
bs[7-i] = (( ba & nTmp) == nTmp )? 1 : 0;
}
}
int Bitstr2ByteArr(int * bs,int ba)
{
int n = 0;
for (int i = 0 ; i < 8;++i)
{
n += bs[7-i] * (1 << i);
}
*bs = n;
return n;
}

1|0utils.h

#ifndef _UTILS_H_
#define _UTILS_H_
int ByteArr2Bitstr(int ba,int * bs);
int Bitstr2ByteArr(int * bs,int ba);
#endif

1|0运行结果


__EOF__

本文作者Oxygen_bean
本文链接https://www.cnblogs.com/GanNy/p/16337628.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   氧气2019  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示