C语言字符串转十六进制数例如“2a”转换成0x2a

参与公司的web server项目时,在与网页的信息处理中,要将12个字节的字符串例如“012a3b4d5e6f”,转换为十六进制数0x01,0x2a,0x3b,0x4d,0x5e,0x6f

#define uint8_t unsigned char
#define BUILD_UINT8(loByte, hiByte ) \
    ((uint8_t)(((loByte) & 0x0F) + (((hiByte) & 0x0F) << 4)))

int main()
{
	char ID1[12] = "012a3b4c5b6d";
	uint8_t mesh_id[6];
    uint8_t temp_id[12];
	int i;
	
	for(i = 0; i < 12 ; i++) {
        if(ID1[i] >= '0' && ID1[i] <= '9') {
            temp_id[i] = ID1[i] - '0';
        } else {
            temp_id[i] = ID1[i] - 'a' + 10;
        }
        printf(" %d = %d  ", i, temp_id[i]);
    }
	
    for(i = 0; i < 12 ;) {
        mesh_id[i/2] = BUILD_UINT8(temp_id[i+1], temp_id[i]);
        i += 2;
    }
	
	for(i = 0; i < 6 ; i++) {
		printf("%02x\n", mesh_id[i]);
	}
	
	return 0;
}

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值