c++ string 中的十六进制数字转十六进制字符

本文介绍了一种方法,将C++中的字符串转换为十六进制表示,并提供了实现这一功能的具体代码示例。该方法适用于从XML文件读取的十六进制数据,通过解析字符串并转换为unsigned char数组。

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;
}

转载于:https://my.oschina.net/mjRao/blog/650391

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值