C语言将16进制的数转换为字符串的方法

  今天在写代码的时候遇到一个需求:为了与同一产品中的其它设备统一,上位机要求处理字符串,而不是数组。我们都知道在处理数据的时候数组方便,不过考虑到兼顾别的设备(没错我说的就是TI430做的RFID读卡设备,跟上位机之间的协议传递的是字符串/大笑),就尝试了将16进制的数据改为字符串,也就是0xAB,改成“AB”。。。虽然看上去没什么用。
  原先的数据类型是uint8_t,熟悉单片机的都知道这个的含义,其实也就是unsigned char ,说到底还是个char,但偏偏要求表示成’A”B’两个char,然后我内心当然是拒绝的,但没有办法,还是开动脑筋实现了这个不合理的需求。代码如下:

#include <stdio.h>
#include <stdlib.h>
typedef unsigned char   uint8_t;
int main()
{
    int i = 0;
    uint8_t data[5]={0x12,0x34,0x56,0xab,0xef};
    uint8_t str[10];
    uint8_t dst[10];
    for(i = 0; i<5;i++)
    {
        str[2*i] = data[i]>>4;
        str[2*i+1] = data[i]&0xf;
    }
        for(i = 0; i<10;i++)
    {
        sprintf(&dst[i],"%X/n",str[i]);
    }
    for(i = 0; i<10;i++)
    {
         printf("%c\n",dst[i]);
    }
     return 0;
}

  思路就是使用sprintf函数来把参数3的数组以参数2的格式写在参数1的地方去,sprintf函数有点过时了,它有一个更加安全的兄弟叫做sprintf_s,但是我用的那个IDE可能太老了(IAR8.10,呵呵哒了),不支持他兄弟。
  有一个警告是参数1的类型不能是无符号的,
warning: pointer targets in passing argument 1 of ‘sprintf’ differ in signedness [-Wpointer-sign]|
  但是功能实现了,就没再折腾它,反正也没人看,找到解决办法时再更。
  想改成小写字母的话,可以把第二个参数改为%x.
  下面是运行结果,IDE是code::Blocks 16.01,GNU GCC Compiler
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值