600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 将uint8_t类型的16进制字符转化转换为string字符串

将uint8_t类型的16进制字符转化转换为string字符串

时间:2021-04-15 19:22:59

相关推荐

将uint8_t类型的16进制字符转化转换为string字符串

碰到一个需求,需要把硬件读到的uint8_t类型的16进制数据转化为string类型的字符串。

例如,如果读到到的数据是一个uint8_t类型的数组uint8_t code=[5]={0XAA, 0X01, 0XE3, 0X23, 0X34},需要将其转换为string类型字符串"AA01E32334"

当时考虑到的两个思路:

code先转换为char字符串数组,再转化为string字符串遍历code的每一个元素,把每一个元素通过std::to_string转化为string类型的字符子串,然后把所有子串拼接在一起

但是这两个思路有个问题,数据在计算机中进行运算和储存时是以二进制的方式进行的,我们把code中的每一个字符拿出来,不管转成什么其对应的二进制都是同样的,比如0X23对应的二进制是01000110,对应的十进制是35,对应的字符是#,方法1和方法2的区别只不过是将01000110的不同形式转换成了string。而我们需要的是将2和3作为单个的字符依次转成string。

也就是说,对于code中的每个字符,第一步要做的事是将这个16进制数23拆分成2和3,也就是将01000110拆分成00100011,然后再使用上述步骤将其转化为string类型的字符串

示例代码如下

#include "stdafx.h"#include<iostream>#include<string>typedef unsigned char uint8_t;using namespace std;int main(){uint8_t code_roi[5] = {0XAA, 0X01, 0XE3, 0X23, 0X34 };string code_str;for (int i = 0; i < 5;i++){//分离16进制数的"十位"和“个位”char s1 = char(code_roi[i] >> 4);char s2 = char(code_roi[i] & 0xf);//将分离得到的数字转换成对应的ASCII码,数字和字母分开,统一按照小写处理s1 > 9 ? s1 += 87 : s1 += 48;s2 > 9 ? s2 += 87 : s2 += 48;//将处理好的字符放入到string中code_str.append(1,s1);code_str.append(1, s2);}cout << "code_str=" << code_str << endl;system("pause");return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。