您的位置:首页 > 其它

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

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

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: