字符串转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位即可。
16进制字符串转字节数组
int hex2bytearray(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;
}
字节数组转16进制字符串方法1
string bytearray2hex(unsigned char byte_arr[],int arr_len)
{
string hexstr="";
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);
if (hex1>='A'&&hex1<='F')
hex1+=32;
if (hex2>='A'&&hex2<='F')
hex2+=32;
hexstr=hexstr+hex1+hex2;
}
return hexstr;
}
字节数组转16进制字符串方法2
char hb2hex(unsigned char hb)
{
hb = hb & 0xF;
return hb < 10 ? '0' + hb : hb - 10 + 'a';
}
string bytearray2hex(unsigned char byte_arr[],int arr_len)
{
string res;
for(size_t i = 0; i < arr_len; ++ i) {
res.push_back(hb2hex(byte_arr[i] >> 4));
res.push_back(hb2hex(byte_arr[i]));
}
return res;
}
int main()
{
char in[33] = "7bf94fef092a47109c518995ef88c4b2";
unsigned char out[128]={0};
hex2bytearray(in, out);
int len = strlen((const char*)out);
for(int i=0; i<len; i++)
cout << out[i];
printf("\r\n");
string ppp = bytearray2hex(out,16);
cout << ppp.c_str();
system("pause");
return 0;
}
本文详细介绍了如何将16进制字符串转换为字节数组,以及反之的转换方法。提供了两种不同的字节数组转16进制字符串的实现,适合用于数据解析和编码场景。

被折叠的 条评论
为什么被折叠?



