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

数据转换-整数字节数组

时间:2023-05-24 10:11:44浏览次数:32  
标签:字节 int utils 整数 char 数组 printf ba

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

代码

main.c

#include<stdio.h>
#include"utils.h"

//20201212
int main() {

	int p;
	char bytearr[100];
	printf("请输入一个整型数字\n");
	scanf("%d",&p);
	printf("把整型数转化为字节数组\n");
	Int2ByteArr(p,bytearr);
	printf("字节数组为:");
	printf("{%s}\n",bytearr);


	char barr[100];
	int h;
	printf("请输入一个字节数组:");
	scanf("%s",barr);
	printf("把字节数组转化为整型数字:");
	ByteArr2Int(barr,&h);
	printf("%d\n",h);
}

utils.c

#include<stdio.h>
#include"utils.h"
#include<string.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("输入的16进制数据不正确!");
	}
	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("输入的16进制字符不正确");
	}
	return 0;
}

int Int2ByteArr(int i,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(char *ba,int *i) {
	int len;
	int j;
	int n=0;
	*i=0;
	len = strlen(ba);
	for(j=0; j<len; j++) {
		Char2Hex(ba[j],&n);
		//printf("%d\n",n);
		*i=(*i)*16+n;

	}
}

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

运行

image

标签:字节,int,utils,整数,char,数组,printf,ba
From: https://www.cnblogs.com/20201212ycy/p/17427209.html

相关文章

  • 不同路径 II(数组、动态规划)、同构字符串(哈希表、字符串)、颠倒二进制位(位运算、分
    不同路径II(数组、动态规划)一个机器人位于一个_mxn_网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网......
  • 数据转换-整数字节数组
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务1参考《GMT0009-2012SM2密码算法使用规范》第6节“数据转换”在utils.h和utils.c中完成整数与8位字节串的转换功能(10'):intInt2ByteArr(unsignedinti,unsignedchar*ba);intByteArr2Int(unsignedchar*ba......
  • 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      ......