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 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进制的数转换为字符串的方法(改进)相关推荐
- 字符串转16进制和16进制数字解码成字符串的方法 ,适用于所有字符(包括中文)
package com.test;import java.io.ByteArrayOutputStream;public class Test {public static void main(Str ...
- Python3小程序:把连续的16进制UTF8编码转换为字符串
# coding: utf-8 ''' 参考用 mystery = b"\xe5\x88\xab" x = mystery.decode('utf-8') print(x)y = ...
- C语言将16进制数转为10进制数
程序分析: 在16进制转为10进制时会遇到很多情况: 1. 开头是空格.符号等之后才是 0x 或 0X: 对于第一种情况,我们要先判断是字符,把空格这些去了,从字符开始:对于有'+'或'-' 的我们就 ...
- C语言快速互转HEX(16进制)和原始字符串/数组
C语言快速互转HEX(16进制)和原始字符串/数组 缘由 这个起因是昨晚群里有人在讨论怎么把字符串转成HEX方法最佳,讨论到最后变成哪种方法效率最优了.毕竟这代码是要在MCU上面跑的,要同时考虑到时间 ...
- c语言ffffff错误,C语言打印16进制出现0xffffff现象的问题剖析!
C语言打印16进制出现0xffffff现象的问题剖析! 其实类似的问题不是只在网络程序中才会出现的,看示例代码: 复制代码 1 #include 2 int main() 3 { 4 char ...
- 一个16进制的数占多少字节?(半个字节)
1个字节是8位,二进制8位:xxxxxxxx 范围从00000000-11111111,表示0到255.一位16进制数(用二进制表示是xxxx)最多只表示到15(即对应16进制的F),要表示到255, ...
- BIN,BCD,ASCII码分别对应的Hex(16进制)数
BIN,BCD,ASCII码分别对应的Hex(16进制)数 以十进制的 56 为例: BIN 码 对应二进制数为 0011 1000 对应Hex数据为 0x38 BIN码就是二进制数: 压缩BCD 码 ...
- 将M进制的数转换为N进制的数(java)
package Four; import java.math.BigInteger; /** 进制转换* 题目描述* 将M进制的数转换为N进制的数* 输入的第一行包括两个整数M,N(M>=2,N ...
- python中文转16进制_Python 16进制与中文相互转换的实现方法
Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型的转为utf-8的解决办法 相信小伙伴们遇到过类似这样的问题,python2中各种头疼的转码,类似u'\xe6\x9 ...
最新文章
- 在linux下查询日志
- Linux 笔记 - 第十八章 Linux 集群之(三)Keepalived+LVS 高可用负载均衡集群
- queue的常见用法详解
- MyBatis使用resultMap自定义映射规则与关联映射
- opencv 直方图_OpenCV之图像直方图反向投影
- 限制文本框只能输入数字和小数点
- 十天学Linux内核之第七天---电源开和关时都发生了什么
- Springboot中几个层的功能总结
- 作者:姚阳(1979-),女,广州市社会科学院经济学副研究员。
- sql查询时的左连接,右连接,和内连接详细解释
- 《Linux内核设计与实现》第四章学习笔记——进程调度
- katana lookfile属性的修改overwride
- html自动汉字转拼音,输入汉字转换成拼音首字母js代码
- 黄河小浪底调水调沙问题(mathmatica)
- Ubuntu 搜狗输入法 中文 无法切换 英文
- 求解三维空间中两向量之间的夹角
- 如何解决网站大流量和高并发问题?
- 通过git上传个人项目代码到coding.net
- 计算机说话技巧,随机应变的说话技巧
- 【生活点滴】-- 学生工作、校园经历