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

时间: 2024-10-13 10:44:12

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

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

昨天写了一个方法,可以将嵌入式C常用的uint8_t数据转为一个字符,但是程序有警告,尴尬症发作甚是不爽,于是在今天解决了这个问题.昨天的博文 C语言中的char是一字节,也就是8个二进制位,正好可以表示成2个16进制的数.但是第一位是符号位,而单片机用的C语言中常常不牵扯负数,所以更常见的就是使用无符号的char(unsigned char),再定义为uint8_t(typedef unsigned char uint8_t;),这样子就可以用8个二进制位表示成2个16进制的数,如1111 1

iOS开发中16进制颜色(html颜色值)字符串转为UIColor

//16进制颜色(html颜色值)字符串转为UIColor +(UIColor *) hexStringToColor: (NSString *) stringToConvert { NSString *cString = [[stringToConvert stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; // String should be

C语言打印16进制出现0xffffff现象的问题剖析!

今天在博问里面看到一个朋友的问题,大致是在网络程序中,打印出来的16进制数,莫名的出现ffffff.例如,某个byte真是值为0xc9,打印出来确是0xffffffc9.原博问连接如下:http://q.cnblogs.com/q/71073/ 其实类似的问题不是只在网络程序中才会出现的,看示例代码: 1 #include <stdio.h> 2 int main() 3 { 4 char c = 0xc9; 5 printf("A:c = %2x\n",(unsigned

16进制颜色(html颜色值)字符串转为UIColor

互联网 App 中经常会用到 html 颜色值转换 UIColor,比如:#FF9900.0XFF9900 等颜色字符串,以下方法可以将这些字符串转换为 UIColor 对象. + (UIColor *) colorWithHexString: (NSString *) stringToConvert    {     NSString *cString = [[stringToConvert stringByTrimmingCharactersInSet:[NSCharacterSet whi

字和字节和位和16进制数的关系

字 word 字节 byte 位 bit 字长是指字的长度 1字=2字节(1 word = 2 byte) 1字节=8位(1 byte = 8bit)  一个字的字长为16 一个字节的字长是8 两个16进制数! 一个字节八个比特,就是八个二进制位   0000 0000     0x00-0xFF (十进制0-255) 四个二进制数最大表示为15,就是一个16进制数,所以八位可以表示成两个16进制的数!

数组中hashCode就是内存地址,以及汉字幻化为16进制或10进制

int[] arr4={1,2,3,4,5}; System.out.println("arr4: "+arr4); System.out.println("arr4.hashCode: "+arr4.hashCode()); //将hashCode值转化为16进制的两种方式 System.out.println(Integer.toString(366712642,16));//将整数转化为16进制的数为:15db9742 System.out.println(I

16进制可逆加密算法

16进制可逆操作类: public static class Hex16 { /// <summary> /// 作用:将字符串内容转化为16进制数据编码,其逆过程是Decode /// 参数说明: /// strEncode 需要转化的原始字符串 /// 转换的过程是直接把字符转换成Unicode字符,比如数字"3"-->0033,汉字"我"-->U+6211 /// 函数decode的过程是encode的逆过程. /// </sum

C# 16进制与字符串、字节数组之间的转换(转)

1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串   //十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, 2)); //十进制转八进制 Console.WriteLine("十进制166的八进制表示: "+Convert.ToString(166, 8)); //十进制转十六进制 Console.WriteLine("十进制166的十六进制表示: "+C

16进制、编码(编码问题随理解深入持续更新中)

16进制: 十进制转换成8进制: oct ( 数字) 十进制转换成16进制:  hex( 数字) CPU.内存.硬盘我们看到都是采用的16进制计算. 一个字节(byte)能够用2个16进制的数来表示.4个2进制对应1个16进制. 编码: 所有的系统.编程语言都默认支持Unicode. UTF-8/GBK... --> decode 解码 --> Unicode Unicode --> encode 编码 --> GBK / UTF-8 .. 假设某Python文件是以UTF-8保存