本帖最后由 Mr.liu 于 2020-11-4 14:22 编辑
格式化输出之数据类型转换技巧--HEX转同值字符串
如何将数组:
unsigned char decrypt[16]={0x49,0xf2,0x73.0x16,0xac,0x4e,0xe7,0xa9,0xb7,0x46,0x7e,0xc4,0x74,0xf0,0xf2,0x53};转化为:
32位小写,
unsigned char decrypt[32]={'4','9','f','2','7','3','1','6','a','c','4','e','e','7','a','9','b','7','4','6','7','e','c','4','7','4','f','0','f','2','5','3'}; 或者unsigned char decrypt[32]=“49f27316ac4ee7a9b7467ec474f0f253”;
32位大写,
unsigned char decrypt[32]={'4','9','F','2','7','3','1','6','A','C','4','E','E','7','A','9',B','7','4','6','7','E','C','4','7','4','F','0','F','2','5','3'}; 或者unsigned char decrypt[32]=“49F27316AC4EE7A9B7467EC474F0F253”;
大家有什么简单有效的方法?
当然,方法很应该很多,最直的想法是一个字节的拆,然后加一个值转成值对应的ASCII字符值,然后连接在一起。(我最先是这样想的)
这是会不会效率太低了,或者有没有更好的方法呢?答案是当然有,经过仔细查找C标准库函数,发现格式化输出函数其实也是可以进行数据类型转换!!!
好吧,废话不多说了,直接上代码:
//HEX转同值字符串
uint8_t HexToStr(char * Rbuffer,const char *string,uint16_t byteLeng,uint8_t Capitalize)
{
uint16_t cnt=0;
char pbuf[32];
if(byteLeng>16) return 1; //数据超长
if(string==NULL) return 2; //参数错误
for(cnt=0;cnt<byteLeng;cnt++)
{
if(Capitalize) sprintf(pbuf, "%02X", string[cnt]); //大写输出
else sprintf(pbuf, "%02x", string[cnt]); //小写输出
strncat(Rbuffer, pbuf, 2);
}
printf("Rbuffer:%s\r\n",Rbuffer);
return 0; //转换成功
}
如果大家有更好的方法,请分享一下,谢谢!
|