十六进制字符串转byte数组实现

本文介绍了如何将字符串转换为byte数组以及如何反向操作。提供了详细的C/C++代码示例,展示了十六进制字符串与byte数组之间的转换过程。

字符串转byte数组,就是实现如下功能:把一个字符串,比如“E4F1C3A81F”每两位作为一个十六进制数存到一个unsigned char 型的数组(buf)里,buf[0] = 0xE4,buf[1] = 0xF1,buf[2] = 0xC3,buf[3] = 0xA8......。我们知道字符串中的字符在计算机中大小是其ASCII码值,比如E的ASCII值是69,但是E如果作为一个十六进制数,在计算机中的大小是14,所以我们需要找到一种对应关系将字母E(69)->14,同样将第二位的数字字符4(ASCII:52)->4,并将转换后的14放到高4位,4放到低4位即可。

完整代码实现:

 

int Change(char s[],unsigned char bits[]) {
	int i,n = 0;
	for(i = 0; s[i]; i += 2) {
		if(s[i] >= 'A' && s[i] <= 'F')
			bits[n] = s[i] - 'A' + 10;
		else bits[n] = s[i] - '0';
		if(s[i + 1] >= 'A' && s[i + 1] <= 'F')
			bits[n] = (bits[n] << 4) | (s[i + 1] - 'A' + 10);
		else bits[n] = (bits[n] << 4) | (s[i + 1] - '0');
		++n;
	}
	return n;
}


如果想实现反转回去的话,使用下面的代码:

 

 

string* byteToHexStr(unsigned char byte_arr[],int arr_len)
{
	string*  hexstr=new string();
	for (int i=0;i<arr_len;i++)
	{
		char hex1;
		char hex2;
		int value=byte_arr[i];
		int v1=value/16;
		int v2=value % 16;

		if (v1>=0&&v1<=9)
			hex1=(char)(48+v1);
		else
			hex1=(char)(55+v1);

		if (v2>=0&&v2<=9)
			hex2=(char)(48+v2);
		else
			hex2=(char)(55+v2);

		*hexstr=*hexstr+hex1+hex2;
	}
	return hexstr;
}


其实如果转换成char型数组的话,对于计算机来说是一样的,因为转换后的值在计算机中都是二进制来存在的,但对于我们用户可能不太一样,因为char型的值最高位是一个符号位,而unsigned char型最高位是数值位,所以说如果最高位为1,那么在char里就是一个负值,如果最高位为0的话,是没有区别的。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值