首页 > 其他分享 >数据转换-位串字节数组

数据转换-位串字节数组

时间:2023-05-24 09:11:06浏览次数:66  
标签:ba int utils bs char 数组 位串 include 字节

  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 = “051C”; len=2

char ba[] = "051C";
ByteArr2Bitstr(char * ba, char * bs);
//结果:bs= "1010010100011100"
3 提交代码(或代码链接)和运行结果

main.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);
	}

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

utils.h

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

截图:

标签:ba,int,utils,bs,char,数组,位串,include,字节
From: https://www.cnblogs.com/killerqueen4/p/17427005.html

相关文章

  • 蓝桥杯2022年第十三届决赛真题-斐波那契数组(动态规划)
    题目描述如果数组A=(a0,a1,···,an−1)满足以下条件,就说它是一个斐波那契数组:n≥2;a0=a1;对于所有的i(i≥2),都满足ai=ai−1+ai−2。现在,给出一个数组A,你可以执行任意次修改,每次修改将数组中的某个位置的元素修改为一个大于0的整数。请问最......
  • 【web 开发】PHP8中数组的序列化和反序列化
    前言数组的序列化(serialize)用来将数组的数据转换为字符串,以方便传递和数据库的存储。与之相对应的操作就是反序列化(unserialize),把字符串数据转换为数组加以使用。数组的序列化主要通过serialize()函数来完成。字符串的反序列化主要通过unserialize()函数来完成。对象的序列化与反序......
  • C语言--柔性数组
    柔性数组柔性数组的大小是未知的,数组大小是可以调整的。结构体中最后一个元素允许是未知大小的数组。#inclide<stdio.h>#include<string.h>#include<errno.h>typedefstructS{intn;intarr[];//柔性数组成员//intarr[0];//柔性数组成员}S;intmain(){ S*p......
  • 区间数组
    #include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intn;structRange{intl,r;booloperator<(constRange&w)const{returnl<w.l;}}range[N];intmain(){cin>>n;for(inti=0;i<n;......
  • typedef的4种常见用法(含typedef定义结构体数组类型)
    typedef的4种常见用法:一、给已定义的变量类型起个别名二、定义函数指针类型三、定义数组指针类型四、定义数组类型总结一句话:“加不加typedef,类型是一样的“,这句话可以这样理解:没加typedef之前如果是个数组,那么加typedef之后就是数组类型;没加typedef之前如果是个函数指针,那......
  • 数组
    数组(遍历,最值,排序,查找)数据类型[]数组名=null数组名:new数据类型[长度];(动态初始化)初始化:就是为了数组中的数组元素分配内部空间,并为每个数组元素赋值数据类型:byte short int long    默认初始化值  0         float double      ......
  • 解锁各种js数组骚操作,总有你想要的!
    解锁各种js数组骚操作,总有你想要的!解锁各种js数组骚操作,总有你想要的!标签:javascript前端在开发中,数组的使用场景非常多,平日中也涉及到很多数组相关操作,对一些常见的操作方法进行总结和收藏,在开发中就能信手拈来,大大提高开发效率。本文在gitthub做了收录github.com/Michael-......
  • 数组递增的判断【python实现】
    有时候需要对某一组数组的数据进行判断是否递增的场景,比如我在开发一些体育动作场景下,某些肢体动作是需要持续朝着垂直方向向上变化,那么z轴的值是会累增的。同理,逆向考虑,递减就是它的对立面。下面是查找总结到的所有方式,如有补充可以评论区提出。资料参考来源:Checkiflist......
  • FZU 2236(离散化+树状数组)
    【离散化】借此题记一下离散化。离散化:当题目数据很大时,但数的个数不多,可以采用离散化,降低数值,便于计算。例如数列{89,14,9,1000,2};离散化后:{4,3,2,5,1};(此操作后,数值整体降低,甚至可以当数组下标使用了)具体操作参见本题代码。离散化三部曲:1.数组ha[]存储所有存在过的......
  • 图解LeetCode——1460. 通过翻转子数组使两个数组相等(难度:简单)
    一、题目给你两个长度相同的整数数组 target 和 arr 。每一步中,你可以选择 arr 的任意非空子数组 并将它翻转。你可以执行此过程任意次。如果你能让arr 变得与target 相同,返回True;否则,返回False。二、示例2.1>示例1:【输入】target=[1,2,3,4],arr=[2,4,1,3]......