十六进制字符串转byte数组实现
2017-12-26 13:55
447 查看
字符串转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位即可。
完整代码实现:
如果想实现反转回去的话,使用下面的代码:
其实如果转换成char型数组的话,对于计算机来说是一样的,因为转换后的值在计算机中都是二进制来存在的,但对于我们用户可能不太一样,因为char型的值最高位是一个符号位,而unsigned char型最高位是数值位,所以说如果最高位为1,那么在char里就是一个负值,如果最高位为0的话,是没有区别的。
完整代码实现:
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 = s[i] - 'A' + 10; else bits = s[i] - '0'; if(s[i + 1] >= 'A' && s[i + 1] <= 'F') bits = (bits << 4) | (s[i + 1] - 'A' + 10); else bits = (bits << 4) | (s[i + 1] - '0'); ++n; } return n; }
如果想实现反转回去的话,使用下面的代码:
string* byteToHexStr(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的话,是没有区别的。
相关文章推荐
- c++ byte类型数组转十六进制字符串的几种代码实现
- Java实现byte数组与十六进制字符串互转化
- MSDN将字节数组转换为十六进制值字符串时 Byte 的用法
- Java byte数组与十六进制字符串互转
- Java byte数组与十六进制字符串互转
- Java byte数组与十六进制字符串互转
- 使用Java完成byte数组与十六进制字符串相互转换
- byte[]数组与十六进制字符串与字符串的互相转换
- Java byte数组与十六进制字符串互转
- c#实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
- 字符串、十六进制、byte数组互转
- Java byte数组与十六进制字符串互转
- 密码学2——Java byte数组与十六进制字符串互转
- Java byte数组与十六进制字符串互转
- 十六进制字符串和byte数组之间的各种转换关系
- 使用Java来实现String字符串和Byte[]数组的转换
- java中byte数组与十六进制字符串相互转换
- Java byte数组与十六进制字符串互转
- 十六进制字符串转化为byte数组
- 十六进制字符串(CString或char[]) 和 BYTE,char数组 相互转化