码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-05-12 15:10:14      阅读:319      评论:0      收藏:0      [点我收藏+]

标签:

  今天在写代码的时候遇到一个需求:为了与同一产品中的其它设备统一,上位机要求处理字符串,而不是数组。我们都知道在处理数据的时候数组方便,不过考虑到兼顾别的设备(没错我说的就是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
技术分享

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

标签:

原文地址:http://blog.csdn.net/geek_monkey/article/details/51365501

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!