c++ hex string array 转换 串口常用
c++ hex string array 转换
效果如下
tset string is follow
0x50 55 0x35 00 10 203040506073031323334ff
format string is follow
5055350010203040506073031323334F0F
now is to convert to a array and then convert to string to show
5055350010203040506073031323334F0F
input enter to quit
#include <iostream>
#include <string>
#include <vector>
#include <algorithm> // 大写转换
#include <regex>
using namespace std;
class string_help
{
public:
string_help();
static bool IsHexNum(char c);
static void deleteAllMark(string &s, const string &mark);
// 假定完美 hex形式的字符串形如 010203040506...FF 全是大写的并且
// 中间无任何分隔符
const static string demo_srting;
// 替换一次
static string replace_all(string& str, const string& old_value, const string& new_value);
// 迭代替换
static string replace_all_distinct(string& str, const string& old_value, const string& new_value);
// hex数组转换为string
static string HexArrayToString(const vector<unsigned char >& data);
//转换一个string到完美string
static string HexStringFormat(const std::string& data=demo_srting);
// string转换为一个数组
static vector<unsigned char> StringToHexArray(const std::string& data=demo_srting);
};
const string string_help::demo_srting="500010203040506073031323334ff";
string string_help:: replace_all_distinct(string& str, const string& old_value, const string& new_value)
{
string::size_type pos=0;
while((pos=str.find(old_value,pos))!= string::npos)
{
str=str.replace(pos,old_value.length(),new_value);
if(new_value.length()>0)
{
pos+=new_value.length();
}
}
return str;
}
//替换2 循环替换,替换后的值也检查并替换 12212 替换12为21----->22211
string string_help::replace_all(string& str, const string& old_value, const string& new_value)
{
string::size_type pos=0;
while((pos=str.find(old_value))!= string::npos)
{
str=str.replace(str.find(old_value),old_value.length(),new_value);
}
return str;
}
void string_help:: deleteAllMark(string &s, const string &mark)
{
size_t nSize = mark.size();
while(1)
{
size_t pos = s.find(mark); // 尤其是这里
if(pos == string::npos)
{
return;
}
s.erase(pos, nSize);
}
}
bool string_help::IsHexNum(char c)
{
if(c>='0' && c<='9') return true;
if(c>='a' && c<='f') return true;
if(c>='A' && c<='F') return true;
return false;
}
string string_help::HexStringFormat(const std::string& data)
{
vector<unsigned char >hex_array;
//1. 转换为大写
string format_string=data;
transform(data.begin(),data.end(),format_string.begin(),::toupper);
//2. 去除0X
replace_all_distinct(format_string,"0X"," ");
replace(format_string.begin(),format_string.end(),',',' ');
replace(format_string.begin(),format_string.end(),',',' ');
regex e("\\s+");
regex_token_iterator<string::iterator> i(format_string.begin(), format_string.end(), e, -1);
regex_token_iterator<string::iterator> end;
while (i != end)
{
//字串处理
string tmp_get=*i;
for(size_t i = 0; i < tmp_get.length(); )
{
if(IsHexNum(tmp_get[i]))
{
if(i+1<tmp_get.length() && IsHexNum(tmp_get[i+1]) )
{
string one=tmp_get.substr(i,2);
unsigned char value = static_cast<unsigned char>(std::stoi(one,0,16));
hex_array.push_back(value);
i++;
}
else
{
string one=tmp_get.substr(i,1);
unsigned char value = static_cast<unsigned char>(std::stoi(one,0,16));
hex_array.push_back(value);
}
//break;
}
i++;
}
i++;
}
return HexArrayToString(hex_array);
}
vector<unsigned char> string_help::StringToHexArray(const std::string& src)
{
vector<unsigned char> ret;
if(src.size()<1)
{
ret.push_back(0x00);
return ret;
}
for (string::size_type i = 0; i < src.size()-1; i+=2)
{
string one=src.substr(i,2);
unsigned char value = static_cast<unsigned char>(std::stoi(one,0,16));
ret.push_back(value);
}
return ret;
}
string string_help::HexArrayToString(const vector<unsigned char >& data)
{
const string hexme = "0123456789ABCDEF";
string ret="";
for(auto it:data)
{
ret.push_back(hexme[(it&0xF0) >>4]);
ret.push_back(hexme[it&0x0F]);
}
return ret;
}
int main()
{
string test_str="0x50 55 0x35 00 10 203040506073031323334ff";
cout << "tset string is follow"<<endl << test_str<<endl;
string good_str=string_help::HexStringFormat(test_str);
cout << "format string is follow"<<endl << good_str<<endl;
vector<unsigned char> text_array= string_help::StringToHexArray(good_str);
string show_srt =string_help::HexArrayToString(text_array);
cout << "now is to convert to a array and then convert to string to show"<<endl << show_srt<<endl;
cout << "input enter to quit"<<endl;
while (cin) {
return 0;
}
return 0;
}
c++ hex string array 转换 串口常用的更多相关文章
- JavaScript Array和string的转换
Array类可以如下定义: var aValues = new Array(); 如果预先知道数组的长度,可以用参数传递长度 var aValues = new Array(20); -------- ...
- how convert large HEX string to binary array ?
how convert large HEX string to binary I have a string with 14 characters . This is a hex represanta ...
- 【python】bytearray和string之间转换,用在需要处理二进制文件和数据流上
最近在用python搞串口工具,串口的数据流基本读写都要靠bytearray,而我们从pyqt的串口得到的数据都是string格式,那么我们就必须考虑到如何对这两种数据进行转换了,才能正确的对数据收发 ...
- JavaScript string array 数组
Array类可以如下定义: var aValues = new Array(); 如果预先知道数组的长度,可以用参数传递长度 var aValues = new Array(20); -------- ...
- C# 之 将string数组转换到int数组并获取最大最小值
1.string 数组转换到 int 数组 " }; int[] output = Array.ConvertAll<string, int>(input, delegate(s ...
- 转:char*, char[] ,CString, string的转换
转:char*, char[] ,CString, string的转换 (一) 概述 string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准 ...
- HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换
1.将String字符串转换成Blob对象 //将字符串 转换成 Blob 对象 var blob = new Blob(["Hello World!"], { type: 'te ...
- 分享非常有用的Java程序 (关键代码)(五)---把 Array 转换成 Map
原文:分享非常有用的Java程序 (关键代码)(五)---把 Array 转换成 Map import java.util.Map; import org.apache.commons.lang.Ar ...
- [转] HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换
1.将String字符串转换成Blob对象 //将字符串 转换成 Blob 对象 var blob = new Blob(["Hello World!"], { type: 'te ...
随机推荐
- 行内元素进行绝对(absolute),固定(fixed)定位后会变成块级元素·
行内元素进行绝对定位后会变成块级元素· position:absolute; <!DOCTYPE html><html lang="en"><head ...
- 使用Django 测试客户端一起测试视图,模板和URL
Django 测试客户端 self.client.get(url) 测试客户端是Django中TestCase类的一个属性名. 至此已经在网站中可以创建一个清单了. 那么,现在是可以在unit te ...
- 【题解】Mountain Walking-C++
题目题意翻译题意简述:现在给一个N*N的矩阵,找一条路径从左上角走到右下角,每次可以向上下左右四个方向中某个方向走.要求走过的点中,数字最大的减去最小的.要求值越小越好.现在就是要求这个值. 输入格式 ...
- 参数类型 (@Controller层)
@RequestMapping(path = "/listPage")@SuppressWarnings("unchecked")@BussinessLog(v ...
- 使用 nginx_rtmp_module 搭建个人学习流媒体服务器
nginx 共享服务器中的视频 如果服务器处于内网或者没有公网ip,可以使用 相关软件进行打洞或转发 如: frpc https://github.com/fatedier/frp 或 holer h ...
- 验证码的实现类ValidateCode
package com.yujie.util; import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.Buffere ...
- 一个list<Map>里map其中的一个字段的值相同,如何判断这个字段相同,就把这个map的其他字段存入另一个map中
//不建议使用Map保存这些,使用实体bean更好 package com.rxlamo.zhidao; import java.util.*; public class Main { ...
- JavaWeb_(Mybatis框架)动态sql_七
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- docker安装Tomcat并部署war项目
转载:https://blog.csdn.net/javahighness/article/details/82859596 1进入容器 docker exec -it mytomcat bash 以 ...
- fatal: unable to access 'https://github.com/Homebrew/homebrew-core/'
LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54 安装curl "https://nodejs.org/dist/latest/node-${VE ...