C语言十六进制与字符串的快速转换

本文提供十六进制数据与字符串快速转换的方法。

说明

某些场景需要实现十六进制原始数据十六进制字符串的相互转换,如十六进制数据 0x107920AC7F01 和十六进制字符串 “107920AC7F01”。先说常规方式。

  1. 十六进制转字符串(str4raw):
    遍历每个字节,依次取高位和低位值,判断值在0x00~0x09之间还是0x0A-0x0F之间,对应字符为该值加上’0’或’A’(小写则加’a’)。
  2. 字符串转十六进制(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",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值