C语言将16进制的数转换为字符串的方法(改进)
程序员文章站
2022-03-19 20:57:17
昨天写了一个方法,可以将嵌入式C常用的uint8_t数据转为一个字符,但是程序有警告,尴尬症发作甚是不爽,于是在今天解决了这个问题。
C语言中的char是一字节,也就是8个二...
昨天写了一个方法,可以将嵌入式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进制转为字符。
#include #include 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’;
运行结果