栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言16进制数组转对应的字符串

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言16进制数组转对应的字符串

今天碰到一个需求:将16进制的数组转成对应的字符串显示出来,举例:
16进制数组:Hex[4] = {0xc1,0x12,0xe4,0x58};
显示为: “c1 12 e4 58”
一开始使用sprintf没有转出来,后来百度了一下,使用位运算可以做出来,原文章链接点击此处

Ascii表链接:ASCII表

整理了一下代码如下:

#include 
#include 
typedef unsigned char   UChar;
UChar HexToAscii(UChar c){
	if(c > 9){
		return (c+55);     // 16进制 0A 对应的ascii 'A',两者相差55  -- 可以比照ascii表理解
	}else{
		return (c+48);     // 16进制 01 对应的ascii '1'  两者相差48  -- 可以比照ascii表理解
	}
}

UChar hexData[6] = {0xc1,0x12,0xe4,0x58,0xba,0x76};
int main(){
	UChar temp;
	UChar data[32] = {0};
	for(int i = 0; i < sizeof(hexData); i++){
		temp = hexData[i] & 0xf0;   // 取16进制数高位放到 HexToAscii 函数中转成字符
		*(data + i*3) = HexToAscii(temp >> 4);
		temp = hexData[i] & 0x0f;   // 取16进制数低位放到 HexToAscii 函数中转成字符
		*(data + i*3 + 1) = HexToAscii(temp);
		*(data + i*3 + 2) = ' ';  // 添加空格进行区分
	}
	printf("string is %s.n",data);
	return 0;
}

打印如下:

string is C1 12 E4 58 BA 76 .

具体不再展开解释,看代码注释就能明白。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1010002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号