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

数据转换-位串字节数组

时间:2024-06-16 19:34:15浏览次数:17  
标签:printf ba int utils bs char 数组 位串 字节

任务要求

  1. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,使用git管理代码,git commit不能少于5次

  2. 参考《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);

  3. 并写出测试代码测试上述函数(不能与下面代码一样),比如(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"
  1. 提交代码(或代码链接)和运行结果,git log截图
  2. 提交使用markdown格式并转为PDF,或者使用doc,docx格式

任务内容

1、utils.h

点击查看代码
#ifndef _UTIL_H_
#define _UTIL_H_

//char Hex2Char(int i);
//int Char2Hex(char c);

int Hex2Char(int fromi,char * toc);
int Char2Hex(char fromc,int * toi);

int Bitstr2ByteArr(char * bs,char * ba);
int ByteArr2Bitstr(char * ba,char * bs);

int Int2ByteArr(int i,char * ba);
int ByteArr2Int(char * ba,int * i);

#endif
utils.c
点击查看代码
//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';
}
2、main.c
点击查看代码
//main.c
#include<stdio.h>
#include"utils.h"
int main(){
  char ba[100];
  char bs[100];
  printf("input ByteArr:");
  scanf("%s",ba);
  ByteArr2BitStr(ba,bs);
  printf("bitstr:");
  printf("%s\n",bs);

  char baa[100];
  char bss[100];
  printf("input bitstr:");
  scanf("%s",bss);
  BitStr2ByteArr(bss,baa);
  printf("ByteArr:");
  printf("%s\n",baa);
  return 0;
}
3、

image

标签:printf,ba,int,utils,bs,char,数组,位串,字节
From: https://www.cnblogs.com/GJH6/p/18235208

相关文章

  • 字节跳动算法岗面试,问的贼细!
    节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。汇总合集:《大模型面试宝典》(2024版......
  • C语言指针与数组的区别
    在C语言中,指针和数组虽然在很多情况下可以互换使用,但它们在概念上和行为上存在一些区别。下面详细解释这些区别:###数组1.**固定大小**:数组在声明时必须指定大小,这个大小在编译时确定,之后不能改变。2.**连续内存**:数组中的元素在内存中是连续存储的。3.**类型**:数组名代......
  • 图文+实战,轻松学会数据结构【数组】
    作者:周棋洛,大二计算机在校生......
  • NumPy数组的创建
    NumPy数组的创建方法说明array()最常用的方法arange()创建元素值在某个范围的数组,可以指定步长linspace()创建元素值在某个范围的数组,可以指定个数zeros()创建元素值为0的数组ones()创建元素值为1的数组randint(start,end)随机整数,范围为[start,en......
  • 数组(举例详解)
    1.一维数组的创建和初始化有了变量就可以存放数值了存放几个数值可以但是存放一百个呢?这时候就出现了数组1.1数组的创建数组是一组相同类型元素的集合。数组的创建方式:type_t   arr_name   [const_n]type_t  是指数组的元素类型arr_name  是指......
  • 53.最大子数组和
    中等 相关标签相关企业 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。  示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1]的和最......
  • Java--多维数组
    1.多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组2.二维数组    下列数组啊可看成一个两行五列的数组inta[][]=newint[2][5];3.输出二维数组的第一个数组中具体元素,通过调用打印函数printArray,以次输出第一个数组......
  • 算法第六天:力扣第977题有序数组的平方
    一、977.有序数组的平方的链接与题目描述977.有序数组的平方的链接如下所示:https://leetcode.cn/problems/squares-of-a-sorted-array/description/https://leetcode.cn/problems/squares-of-a-sorted-array/description/   给你一个按 非递减顺序 排序的整数数组 n......
  • 大模型的忠诚度,字节开发seed-tts,提示词攻击介绍
    一支烟花官网:https://agifun.love智源社区《管理世界》黄甄魏娜梁正丨从三十余年纵向变迁看跨部门数据共享效果的动态演变机制点击阅读原文来源:http://mp.weixin.qq.com/s?__biz=MzU4MzYxOTIwOQ==&mid=2247510245&idx=1&sn=7942001e12be958e8b21a0d2c9de7723&chksm=f......
  • 【华为OD机试真题】155、计算数组中心位置 | 机试真题+思路参考+代码解析(C++、Java、P
    文章目录一、题目......