本文提供十六进制数据与字符串快速转换的方法。
说明
某些场景需要实现十六进制原始数据与十六进制字符串的相互转换,如十六进制数据 0x107920AC7F01 和十六进制字符串 “107920AC7F01”。先说常规方式。
- 十六进制转字符串(str4raw):
遍历每个字节,依次取高位和低位值,判断值在0x00~0x09之间还是0x0A-0x0F之间,对应字符为该值加上’0’或’A’(小写则加’a’)。 - 字符串转十六进制(str2raw):
先判断字符串长度是不是偶数,如果不是,要在开头补一个’0’,如"1EF"补为"01EF"。
两个字符一组,转换成一个字节。每个字符需要判断在’0’ ~ ‘9’之间还是’A’ ~ ‘F’(或’a’ ~ ‘f’)之间,再决定字符值减去’0’还是’A’(或’a’)。
上述方式缺点比较明显,每个字符或十六进制高低位都需要范围的判断。我们可以提前准备常量映射表,来避免这类数学运算,提高运行效率。直接上代码。
十六进制转字符串
常量映射表:
schar g_hex2ch_map[256][2] =
{
"00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F",
"10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B", "1C", "1D", "1E", "1F",
"20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F",
"30", "31", "32", "33", "34",


1万+

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



