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

数据转换-整数字节数组

时间:2023-05-24 09:33:05浏览次数:32  
标签:字节 int utils unsigned 整数 char ByteArr2Int 数组 ba

在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务
1 参考《GMT 0009-2012 SM2密码算法使用规范》第6节“数据转换” 在utils.h和utils.c中完成整数与8位字节串的转换功能(10'):
int Int2ByteArr(unsigned int i, unsigned char * ba);
int ByteArr2Int(unsigned char * ba,unsigned int * i);

2 并写出测试代码测试上述函数(不能与下面代码一样),比如(10'):
unsigned int i=123456789;
Int2ByteArr(i, ba);
//结果:ba = "075BCD15";

unsigned char ba [] = "075BCD15";
ByteArr2Int(ba, &i);
//结果: i=123456789

3 提交代码(或代码链接)和运行结果

utils.h

#ifndef UTILS_H
#define UTILS_H
int Int2ByteArr(unsigned int i, unsigned char * ba);
int ByteArr2Int(unsigned char * ba,unsigned int * i);
 
#endif

main.c

#include<stdio.h>
#include"utils.h"
int main(){
 
   unsigned int i=20201205;
   unsigned char ba [100]; 
   Int2ByteArr(i, ba);
   printf("ba=%s\n",ba);
 
   unsigned char bb [] = "75DDFA05";
   unsigned int h;
   ByteArr2Int(bb, &h);
   printf("%d\n",h);
 
}

utils.c

#include<stdio.h>
#include"utils.h"
#include<string.h>
int Hex2Char(int f,char *t)
{
    if(f>=0&&f<=9)
    {
        *t= f+'0';
    } 
    else if(f>=10&&f<=15)
    {
        *t = f+'A'-10;
    }
    else
    {
        printf("input error!");
     }
}
int Char2Hex(char f,int *t1)
{
    if(f>='0'&& f<='9')
    {
             *t1= f-'0';
    }
    else if(f>='A'&& f<='F')
    {
             *t1= f-'A'+10;
    
        }
        else 
        {
            printf("input error!");
        }
}
 
 
int Int2ByteArr(unsigned int i, unsigned char * ba)
{
   int j;
   int a;
   int sum=0;
   int k=i;
   for(j=0;;j++)
   {
     k=k/16;
     if(k!=0)
      sum++;
     else
       break;
   }
   for(j=sum;j>=0;j--){
     a = i%16;
     Hex2Char(a,&ba[j]);
     i=i/16;   
 
   }
   ba[sum+1]='\0';
 
 
}
int ByteArr2Int(unsigned char * ba,unsigned int * i)
{
   int len;
   int j;
   int n=0;
   *i=0;
   len = strlen(ba);
   for(j=0;j<len;j++)
   {
      Char2Hex(ba[j],&n);
      *i=(*i)*16+n;  
   }
}

运行截图:

标签:字节,int,utils,unsigned,整数,char,ByteArr2Int,数组,ba
From: https://www.cnblogs.com/gtgtgt/p/17427087.html

相关文章

  • uniapp 数组添加不重复元素
    if(this.checkTimes.includes(_item.time)){this.checkTimes=this.checkTimes.filter((item)=>{returnitem!=_item.time;});}else{this.ch......
  • 数据转换-位串字节数组
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务1参考《GMT0009-2012SM2密码算法使用规范》第6节“数据转换”在附件中的utils.h和utils.c中完成位串与8位字节串的转换功能(10'):intBitstr2ByteArr(unsignedchar*bs,unsignedchar*ba,int*lba);intByteA......
  • 蓝桥杯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......