c语言如何提取16进制中的字节,十六进制字符串到C中的字节数组

这篇博客介绍了一种使用C语言编写的函数,该函数可以将16进制字符串转换为字节数组,尽管它不验证输入是否合法。函数中使用了一个哈希映射表来快速将ASCII字符转换为对应的16进制值。
摘要由CSDN通过智能技术生成

我通过谷歌搜索发现了同样的问题。我不喜欢调用sscanf()或strtol()的想法,因为它感觉像是过分杀了。我编写了一个快速函数,该函数不能验证文本确实是字节流的十六进制表示形式,但是可以处理奇数个十六进制数字:

uint8_t tallymarker_hextobin(const char * str, uint8_t * bytes, size_t blen)

{

uint8_t  pos;

uint8_t  idx0;

uint8_t  idx1;

// mapping of ASCII characters to hex values

const uint8_t hashmap[] =

{

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //  !"#$%&'

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ()*+,-./

0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // 01234567

0x08, 0x09, 0x00, 0x00, 0x00, 0x0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值