c++ string 中的十六进制数字转十六进制字符
问题描述
在做透传控制时,设备控制指令需要编写在xml文件中,由于摄像头控制指令一般都是十六进制,所以从xml文件中读取后会变成string字符串,实际的使用过程中需要转换一下,把两个字节的字符转成1个字节的十六进制。
例如 std::string str="1A023B4D"
,没有任何分隔符,如何获取这个十六进制字符串。然后转换成unsigned char 的数组。
转化后如下:
unsigned char tmp[512]={0};
tmp[0] = 0x1A
tmp[1] = 0x02
...
##代码
static unsigned int hex_char_to_dec(char c)
{
if ('0' <= c && c <= '9')
{
return (c - '0');
}
else if ('a' <= c && c <= 'f')
{
return (c - 'a' + 10);
}
else if ('A' <= c && c <= 'F')
{
return (c - 'A' + 10);
}
else
{
return -1;
}
}
static unsigned int str_to_hex(const unsigned char *str)
{
return (str[1] == '\0') ? hex_char_to_dec(str[0]) : hex_char_to_dec(str[0])*16 + hex_char_to_dec(str[1]);
}
int strhex_parse_hex(std::string in,unsigned char *out)
{
unsigned char hex_str[512] = { 0 };
unsigned char tmp[2] = { 0 };
unsigned int len = in.size() / 2;
for (int i = 0; i < len; i++)
{
int idx = i * 2;
tmp[0] = in.at(idx);
tmp[1] = in.at(idx+1);
out[i] = (unsigned char)str_to_hex(tmp);
}
return len;
}
int main(int argc,char **argv)
{
std::string str = "11121301";
unsigned char buffer[512] = {0};
int len = strhex_parse_hex(str, buffer);
for(int i = 0; i < len; i++)
{
printf("%02X", buffer[i]);
}
printf("\n");
return 0;
}