【C语言小技巧】16进制字符串与字符串互转 您所在的位置:网站首页 c语言16进制输出格式是什么 【C语言小技巧】16进制字符串与字符串互转

【C语言小技巧】16进制字符串与字符串互转

2024-07-10 07:45| 来源: 网络整理| 查看: 265

平时我们在写功能需求时,难免不会遇到需要将16进制字符串转换成字符串,或者字符串转16进制字符串的需求,所以就有了这篇文章。

在进入主题之前,我们先来回顾一下字符和16进制的关系。我们知道正常的16进制数值(像0x32)和ASIIC码(0x32对应字符2)之间是互通的,即如果你输出数值,就是输出的字符的数值(例如,字符0,十进制就是48),如果你输出字符,那就是输出的字符,不会进行转换(例如,字符0,输出就是字符0),具体可以看下面示例:

char ch = '0'; int i = 48; printf("int: %d", ch); // 输出: int: 48 printf("char: %c", ch); // 输出: char: 0 printf("int: %d", i); // 输出: int: 48 printf("char: %c", i); // 输出: char: 0 16进制字符串转字符串

言归正传,现在我们先来看看16进制字符串转字符串,大致的逻辑就是将16进制字符串每两个字符组合在一起得到一个16进制的字符串,然后再打包转成对应的字符。我们可以利用库函数strtol(),其函数声明为long int strtol(const char *str, char **endptr, int base),该函数的功能是把参数 str 所指向的字符串根据给定的 base 转换为一个长整数(类型为 long int 型),base 必须介于 2 和 36(包含)之间,或者是特殊值 0。

参数: str – 要转换为长整数的字符串endptr – 对类型为char*的对象的引用,其值由函数设置为str中数值后的下一个字符base – 基数,必须介于2和36(包含)之间,或者特殊值0。如果base为0,则会根据字符串的前缀来判断进制 返回值: 函数返回被转换的长整型整数值。如果输入字符串不符合数字格式,strtol() 将返回 0。如果转换结果超出了 long 整数的表示范围,那么将产生溢出,并设置 errno 为 ERANGE。你可以使用 头文件中的 errno 变量来检查是否有溢出发生。

现在我们来进行实战操作,如下示例:

#include // 要使用strtol()库函数,需要包含头文件 char data[] = "48656C6C6F20576F726C6421210D0A"; // 假如,我们接收到这样的数据 char res[32]; // 储存转换后的结果 int hex_str_2_str(char *dest, char *src) { int len = strlen(src); // 获取接收数据长度 int i,j; for (i = 0, j = 0; i int len = strlen(src); // 获取接收数据长度 int i,j; for (i = 0, j = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有