C语言将16进制的数转换为字符串的方法(改进)
2016-05-11 10:53
651 查看
昨天写了一个方法,可以将嵌入式C常用的uint8_t数据转为一个字符,但是程序有警告,尴尬症发作甚是不爽,于是在今天解决了这个问题。昨天的博文
C语言中的char是一字节,也就是8个二进制位,正好可以表示成2个16进制的数。但是第一位是符号位,而单片机用的C语言中常常不牵扯负数,所以更常见的就是使用无符号的char(unsigned char),再定义为uint8_t(typedef unsigned char uint8_t;),这样子就可以用8个二进制位表示成2个16进制的数,如1111 1110就是0xFE,如果需要的不是16进制数,而是一个字符,那么可以用以下方法来实现16进制转为字符。
注意,HexToChar函数中,由于传入的参数都是无符号的,故不用判断正负。
需要小写的字符可修改此处dst = temp -10 +’a’;
运行结果
C语言中的char是一字节,也就是8个二进制位,正好可以表示成2个16进制的数。但是第一位是符号位,而单片机用的C语言中常常不牵扯负数,所以更常见的就是使用无符号的char(unsigned char),再定义为uint8_t(typedef unsigned char uint8_t;),这样子就可以用8个二进制位表示成2个16进制的数,如1111 1110就是0xFE,如果需要的不是16进制数,而是一个字符,那么可以用以下方法来实现16进制转为字符。
#include <stdio.h> #include <stdlib.h> typedef unsigned char uint8_t; char hexToch (uint8_t old); uint8_t HexToChar(uint8_t temp); 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++) { dst[i] = HexToChar(str[i]); } for(i = 0; i<10;i++) { printf("%c\n",dst[i]); } return 0; } uint8_t HexToChar(uint8_t temp) { uint8_t dst; if (temp < 10){ dst = temp + '0'; }else{ dst = temp -10 +'A'; } return dst; }
注意,HexToChar函数中,由于传入的参数都是无符号的,故不用判断正负。
需要小写的字符可修改此处dst = temp -10 +’a’;
运行结果
相关文章推荐
- C语言算法--统计字符串中单词的个数
- C语言算法--统计字符串中单词的个数
- C语言算法--统计字符串中单词的个数
- c++11时间函数
- C/C++中一维与多维数组
- VS2013 C++ 项目占用空间较大的解决方法(vc++部分)
- C/C++中strlen的用法
- leetcode_155_Min Stack(C++)(easy)
- 五子棋的c语言源码
- c++面试题
- C++ TR1 智能指针shared_ptr的使用(转)
- C语言中的strstr函数的用法
- C语言变量的作用范围
- c语言宏定义详解
- 开始使用C++11的9个理由
- C++11
- C++知识点整理
- C/C++中strcpy函数的用法
- C语言删除字符串中重复的字符
- C语言删除字符串中重复的字符