昨天写了一个方法,可以将嵌入式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 <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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

  注意,HexToChar函数中,由于传入的参数都是无符号的,故不用判断正负。
  需要小写的字符可修改此处dst = temp -10 +’a’;
运行结果

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

  1. 字符串转16进制和16进制数字解码成字符串的方法 ,适用于所有字符(包括中文)

    package com.test;import java.io.ByteArrayOutputStream;public class Test {public static void main(Str ...

  2. Python3小程序:把连续的16进制UTF8编码转换为字符串

    # coding: utf-8 ''' 参考用 mystery = b"\xe5\x88\xab" x = mystery.decode('utf-8') print(x)y = ...

  3. C语言将16进制数转为10进制数

    程序分析: 在16进制转为10进制时会遇到很多情况: 1. 开头是空格.符号等之后才是 0x 或 0X: 对于第一种情况,我们要先判断是字符,把空格这些去了,从字符开始:对于有'+'或'-' 的我们就 ...

  4. C语言快速互转HEX(16进制)和原始字符串/数组

    C语言快速互转HEX(16进制)和原始字符串/数组 缘由 这个起因是昨晚群里有人在讨论怎么把字符串转成HEX方法最佳,讨论到最后变成哪种方法效率最优了.毕竟这代码是要在MCU上面跑的,要同时考虑到时间 ...

  5. c语言ffffff错误,C语言打印16进制出现0xffffff现象的问题剖析!

    C语言打印16进制出现0xffffff现象的问题剖析! 其实类似的问题不是只在网络程序中才会出现的,看示例代码: 复制代码 1 #include 2 int main() 3 { 4     char ...

  6. 一个16进制的数占多少字节?(半个字节)

    1个字节是8位,二进制8位:xxxxxxxx 范围从00000000-11111111,表示0到255.一位16进制数(用二进制表示是xxxx)最多只表示到15(即对应16进制的F),要表示到255, ...

  7. BIN,BCD,ASCII码分别对应的Hex(16进制)数

    BIN,BCD,ASCII码分别对应的Hex(16进制)数 以十进制的 56 为例: BIN 码 对应二进制数为 0011 1000 对应Hex数据为 0x38 BIN码就是二进制数: 压缩BCD 码 ...

  8. 将M进制的数转换为N进制的数(java)

    package Four; import java.math.BigInteger; /** 进制转换* 题目描述* 将M进制的数转换为N进制的数* 输入的第一行包括两个整数M,N(M>=2,N ...

  9. python中文转16进制_Python 16进制与中文相互转换的实现方法

    Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型的转为utf-8的解决办法 相信小伙伴们遇到过类似这样的问题,python2中各种头疼的转码,类似u'\xe6\x9 ...

最新文章

  1. 在linux下查询日志
  2. Linux 笔记 - 第十八章 Linux 集群之(三)Keepalived+LVS 高可用负载均衡集群
  3. queue的常见用法详解
  4. MyBatis使用resultMap自定义映射规则与关联映射
  5. opencv 直方图_OpenCV之图像直方图反向投影
  6. 限制文本框只能输入数字和小数点
  7. 十天学Linux内核之第七天---电源开和关时都发生了什么
  8. Springboot中几个层的功能总结
  9. 作者:姚阳(1979-),女,广州市社会科学院经济学副研究员。
  10. sql查询时的左连接,右连接,和内连接详细解释
  11. 《Linux内核设计与实现》第四章学习笔记——进程调度
  12. katana lookfile属性的修改overwride
  13. html自动汉字转拼音,输入汉字转换成拼音首字母js代码
  14. 黄河小浪底调水调沙问题(mathmatica)
  15. Ubuntu 搜狗输入法 中文 无法切换 英文
  16. 求解三维空间中两向量之间的夹角
  17. 如何解决网站大流量和高并发问题?
  18. 通过git上传个人项目代码到coding.net
  19. 计算机说话技巧,随机应变的说话技巧
  20. 【生活点滴】-- 学生工作、校园经历

热门文章

  1. 自平衡二叉树(AVL)及四种旋转方式详解
  2. 美国硕士计算机专业排名,2021美国硕士计算机专业排名
  3. 使用ab做web系统的压力测试
  4. 职场感悟-努力与回报与个人价值
  5. 国标GB28181协议和onvif协议都有什么用?
  6. ArcGIS基础实验操作100例--实验77按要素分区统计路网
  7. VS2015配置海康威视工业相机SDK二次开发
  8. Q+无法启动?启动后立即退出?折腾……
  9. Pascal中的常用数学函数
  10. 绝对定位、相对定位、固定定位特点