常用数据
2020.12.31 更新
0特殊的十六进制
1.十六进制数值转字符
1.1 0x31变为"31"
1.1.1 QByteArray原数据
//QByteArray转十六进制格式显示"1">>"31" 0x06>>"06" 10>>"0A"
QByteArray data;
QString ret(data.toHex().toUpper());//toUpper()大写
QString ret(data.toHex());
QString MainWindow::ByteArrayToHexString(QByteArray data){
QString ret(data.toHex().toUpper());int len = ret.length()/2;//插入空格
for(int i=1;i<len;i++)
{
ret.insert(2*i+i-1," ");
}
return ret;
1.1.2 int或char等常见数值
int data=1512; //"05e8"
QString strsend48503=QString("%1").arg(data,4,16,QLatin1Char('0'));//int型或char型都可
data,//原数据
4, //一共要多少字符
16, //数据进制
QLatin1Char('0')//左侧不足位补什么字符
方法2
int m=0x31;
QString string;
string=QString::number(m,16);//31
1.2 0x31变为"1"
1.2.1 QByteArray原数据
QByteArray byte;
byte.resize(2);
byte[0]=0x31;
byte[1]=0x32;
QString string =byte; // string="12"
1.2.2 int或char等常见数值
int m=0x31;
QString string;
string[0]=m;
qDebug()<<string; //"1"
char ms[]={0x31,0x31,0x31,0x31,0x31};
string=ms;
qDebug()<<string; //"11111"
2十六进制字符转数值
2.1 "31"变为0x31
2.1.1 QByteArray原数据
先转为Qstring吧
或者用于计算的话可以直接使用QByteArray计算,使用数组索引的方式QByteArray与普通char一样用
char ch=0x0C;
QByteArray string;
string.resize(5);
string[0]=0x01; //01
string[1]=ch; //0C
string[2]=++ch; //0D
string[3]=ch&0xF0; //00
string[4]=ch|0xF0; //FD
qDebug()<<string.toHex().toUpper(); //"010C0D00FD"
2.1.2 QString
这个比较麻烦,只能用逐个字节比对的方式
/*
描述:把两个十六进制字符一个十六进制字节
'a','A'>>0xAA
*/
char charToHex(char H,char L)
{
if((H >= '0') && (H <= '9'))
H-='0';
else if((H >= 'A') && (H <= 'F'))
H=H-'A'+10;
else H='*';
if((L >= '0') && (L <= '9'))
L-='0';
else if((L >= 'A') && (L <= 'F'))
L=L-'A'+10;
else L='*';
return ((H&0x0F)<<4)|(L&0x0F);
}
/*
描述:把一个十六进制字符串转化为十六进制数数组
"01 15 26 581512">>{0x01,0x15,0x26,0x58,0x15,0x12}
*/
char* dataTypeConversion::hexStr_To_Hexchar(QString data)
{ //"19885984ac418df"
static char re[200];
for(int re_num=0;re_num<200;re_num++)
{re[re_num]=0;}
int Lenth,cnt=0;
data.remove(' '); //删除字符串中的空格
data=data.toUpper();
Lenth=data.length(); //获取长度
if(Lenth%2==1)
{
data+="0";
Lenth++;
}
std::string ch = data.toStdString();
const char*p = ch.c_str();
char high = 0, low = 0;
int i=0;
for (cnt=0; cnt<Lenth; cnt+=2)
{
high = p[cnt];
low = p[cnt+1];
re[i++]=charToHex(high,low);
}
return re;
}
2.2 "1"变为0x31
2.2.1 QByteArray原数据
QString ret(data.toHex().toUpper());//转为16进制大写 QByteArray.toHex() 转为十六进制字符 '1'>>"31"
/*
描述:把一个十六进制字符串转化为十六进制数数组
"123456">>{0x31,0x32,0x33,0x34,0x35,0x36}
*/
//mode :2显示0x 0:显示空格
QString dataTypeConversion::strToHexstr(QByteArray data,int mode)
{
QString ret(data.toHex().toUpper());//转为16进制大写 QByteArray.toHex() 转为十六进制字符 '1'>>"31"
int len = ret.length()/2;
if(mode==2)
{
ret.insert(0,"0X");
for(int i=1;i<len;i++)
{
ret.insert(4*i+i-1,",0X");//编写格式
}
}
else {
for(int i=1;i<len;i++)
{
ret.insert(2*i+i-1," ");//编写格式
}
}
return ret;
}
2.2.2 QString
数值上直接把QString作为数组计算即可
1.数据类型转化
1.1QByteArray
1.1.1 QByteArray>>QString
QByteArray bytes("hello world汉字");
QString string = bytes; //方法1 直接等于
qDebug()<<string;
string = QString(bytes); //方法2用构造函数
qDebug()<<string;
string.prepend(bytes); //方法3 拼接 三种方法效果除拼接功能外数据一样,汉字显示正常
qDebug()<<string;
//对于本地化编码的字符串,可以用 QString::fromLocal8Bit 函数将字符串源转为 QString 对象;对于 UTF-8 编码的字符串,可以用 QString::fromUtf8 函数实现转换。如果要反过来转换,就 用对应的 to*** 函数。通常情况下有这些函数就够用了。
1.1.2QByteArray>>String
QString string;
std::string str;
str = string.toStdString();
1.1.3QByteArray>>char *
char *ch; //不能定义成ch[n],数组和指针不一样;
QByteArray byte;
ch = byte.data();
1.1.4QByteArray>>unsigned char*(无变化字符)
1.1.5QByteArray>>unsigned char*(十六进制字符)
1.1.6QByteArray>>int
QByteArray bytes("1234");
bool ok; //转换成功为真
int string = bytes.toInt(&ok,10);//1234
bytes=("1A");
bytes.toInt(&ok,10);//错误
bytes=("1A");
bytes.toInt(&ok,16); //26
1.2QString
1.2.1QString >>QByteArray
QString str("hello");
QByteArray bytes = str.toUtf8(); // QString转QByteArray方法1
QString str("hello");
QByteArray bytes = str.toLatin1(); // QString转QByteArray方法2
1.2.2QString >>String
QString string;
std::string str;
str = string.toStdString();
1.2.3QString >>char *
QString string;
char *ch;
ch = string.toLatin1.data();
1.2.4QString >>unsigned char*(无变化字符)
1.2.5QString >>unsigned char*(十六进制字符)
1.2.6QString >>int
QString string="FFAB";
bool ok;
int uch = string.toInt(&ok, 16);//十六进制FFAB=十进制65451 打印显示65451
string="1234";
uch = string.toInt(&ok, 10)+5;//转换结果为1234 加入一个计算得1239
//第二个参数是进制
基本类型 | Qt别称 | 转入函数 | 转出函数 | 描述 |
---|---|---|---|---|
short | qint16 | arg或setNum | toShort | 2 字节长度,有符号短整型。 |
unsigned short | ushort、quint16 | arg或setNum | toUShort | 2 字节长度,无符号短整型。 |
int | qint32 | arg或setNum | toInt | 4 字节长度,有符号整型。 |
unsigned int | uint、quint32 | arg或setNum | toUInt | 4 字节长度,无符号整型。 |
long | 无 | arg或setNum | toLong | 有符号长整型,对于 32 位编程 long 是 4 字节长度,对于 64 位编程是 8 字节长度。 |
unsigned long | ulong | arg或setNum | toULong | 无符号长整型,对于 32 位编程 unsigned long 是 4 字节长度,对于 64 位编程是 8 字节长度。 |
long long | qlonglong、qint64 | arg或setNum | toLongLong | 8 字节长度,有符号长长整型。 |
unsigned long long | qulonglong、quint64 | arg或setNum | toULongLong | 8 字节长度,无符号长长整型。 |
float | 默认情况下无 | arg或setNum | toFloat | 4 字节长度,单精度浮点数。 |
double | 默认情况对应 qreal | arg或setNum | toDouble | 8 字节长度,双精度浮点数。 |
1.3String
1.3.1String>>QByteArray
1.3.2String>>QString
1.3.3String>>char *
1.3.4String>>unsigned char*(无变化字符)
1.3.5String>>unsigned char*(十六进制字符)
1.3.6String>>int
1.4char *
1.2.1char *>>QByteArray
char *ch="145aBc汉字";
QByteArray byte;
byte = QByteArray(ch); //显示"145aBc\xE6\xB1\x89\xE5\xAD\x97"
1.2.2QString
char *ch="145aBc汉字";
QString string= QString(QLatin1String(ch));//"145aBc?±\u0089?\u00AD\u0097"
1.2.2String
1.2.4unsigned char*(无变化字符)
1.2.5unsigned char*(十六进制字符)
1.2.6int
1.5unsigned char*(无变化字符)
1.2.1QByteArray
1.2.2QString
unsigned char uch;
QString string = QString::number(uch,16);
1.2.2String
1.2.4char*(无变化字符)
1.2.5unsigned char*(十六进制字符)
1.2.6int
1.6unsigned char*(十六进制字符)
1.7int
1.7.1 int>>QByteArray
/*int转QByteArray
1584转为 0x15,0x84*/
QByteArray dataTypeConversion::intToByte(int i)
{
QString intToQString=QString("%1").arg(i,4,16,QLatin1Char('0'));
//qDebug()<<intToQString;
QByteArray QStringTovalueQByte = intToQString.toLocal8Bit();
QByteArray valueQByteToHex = QByteArray::fromHex(QStringTovalueQByte);
//qDebug()<<valueQByteToHex.toHex();
return valueQByteToHex;
}
1.7.1.1字符串形式
QByteArray arr;
arr+="//串口配置\r\n";
arr+=QString("comboBoxBaud=%1\r\n").arg(12);
1.7.1.2数值形式
1.2 数值
1.2.1 int转十六进制字符
QString strsend48503=QString("%1").arg(ui->spinBox_485_03IDAddr->value(),4,16,QLatin1Char('0'));//int型或char型都可