字符串流与十六进制的转换

一般效率高的函数都要出输入是十六进制流,但是转换成十六进制后有些字符不可见,这对人来说不太好,所以需要转换。

char get_dec_value(char ch)
{
	if ( ch >= '0' && ch <= '9')     return ch - '0';
	else if (ch >= 'a' && ch <= 'z') return ch - 'a' + 10;
	else if (ch >= 'A' && ch <= 'Z') return ch - 'A' + 10;
	else return -1;
}

char get_hex_char(char ch)
{
	if (ch >= 0 && ch <= 9)        return ch + '0';
	else if (ch >= 10 && ch < 16)  return ch - 10 + 'A';
	else return -1;
}

int string_to_hex(const char *src, char *dst)
{
	if (NULL == src || NULL == dst) return -1;

	int  len = 0;
	char ch1, ch2;
	const char *p = src;
	while ('\0'!= *p)
	{
		ch1 = get_dec_value(*p++);
		if (ch1 < 0) return -1;

		ch2 = get_dec_value(*p++);
		if (ch2 < 0) return -1;

		if (NULL == dst + len || NULL == dst + len + 1) return -1;

		*(dst + len) = ch1 * 16 + ch2;
		*(dst + (++len)) = '\0';
	}

	return 0;
}

int hex_to_string(const char *src, int src_len, char *dst)
{
	if (NULL == src || NULL == dst) return -1;
	int i   = 0;
	while (i < src_len)
	{
		char ch = *(src + i);
		*dst++ = get_hex_char((ch & 0xF0) >> 4);
		if (NULL == dst) return -1;
		*dst++ = get_hex_char( ch & 0x0F);
		if (NULL == dst) return -1;
		*dst = '\0';
		i += 1;
	}
	return i * 2;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值