文章目錄
- 0 背景
- 1 QByteArray與int
- 1.1 QByteArray【16進制】轉int
- 1.2 int【10進制】轉QByteArray
- 2 QByteArray與QString
- 2.1 QByteArray轉QString
- 2.1.1 QByteArray轉16進制的QString
- 2.2 QString轉QByteArray
- 2.2.1 16進制的QString轉QByteArray:
- 3 QString和int
- 3.1 QString轉int
- 3.2 int轉QString
- 4 結構體轉QByteArray
- 5 char*和QByteArray
- 5.1 char*轉QByteArray
- 5.2 QByteArray轉char*
- 6 QByteArray和unsigned char *
- 6.1 QByteArray轉unsigned char *
- 6.2 unsigned char *轉 QByteArray
- 7 string和QString
- 7.1 string轉QString
- 7.2 QString轉string
- 8 QString和char*
- 8.1 QString轉char*
- 8.1.1 法一
- 8.1.1 法二
- 8.2 char*轉QString
0 背景
因為TCP網絡傳輸資料的原因,經常要對一些資料進行進制轉換,然後才能進行發送,是以查閱了大量的資料加上自己的實踐整理出此文,友善日後查詢。
1 QByteArray與int
1.1 QByteArray【16進制】轉int
bool ok;//ok = true
QByteArray s_length;
int totalBytes = s_length.toHex().toInt(&ok, 16);
測試代碼:
bool ok;
QByteArray s_length;
s_length[0] = 0x0F;
int totalBytes = s_length.toHex().toInt(&ok, 16);
qDebug()<<"totalBytes:"<<totalBytes;
1.2 int【10進制】轉QByteArray
int i = 2;
QByteArray res;
res.resize(4);
//小端存儲,資料的低位在位元組的高位
res[3] = (unsigned char)(0x000000ff & i);
res[2] = (unsigned char)((0x0000ff00 & i)>>8);
res[1] = (unsigned char)((0x00ff0000 & i)>>16);
res[0] = (unsigned char)((0xff000000 & i)>>24);
QByteArray res;
res.append((num&(0xff000000))>>24);
res.append((num&(0x00ff0000))>>16);
res.append((num&(0x0000ff00))>>8);
res.append(num&(0x000000ff));
測試代碼:
int i = 2;
QByteArray res;
res.resize(4);
//小端存儲,資料的低位在位元組的高位
res[3] = (unsigned char)(0x000000ff & i);
res[2] = (unsigned char)((0x0000ff00 & i)>>8);
res[1] = (unsigned char)((0x00ff0000 & i)>>16);
res[0] = (unsigned char)((0xff000000 & i)>>24);
bool ok = true;
qDebug()<<res.toHex().toInt(&ok, 16);
qDebug()<<"res:"<<res;
由于小端存儲,int強轉char時,不需要做任何轉換,是以可以用于測試電腦端是大端還是小端:
bool isLittleEndian()
{
int a=0x00000061;
if((char)a=='a') return true;
else return false;
}
2 QByteArray與QString
2.1 QByteArray轉QString
QByteArray data;
data.resize(2);
data[0] = 0x68;
data[1] = 0x72;
QString str = static_cast<QString>(data);
// qDebug()<
2.1.1 QByteArray轉16進制的QString
QByteArray res;
res.append(0x0A);
QString temp = res.toHex().toUpper();
QString res2 = "";
for(int i = 0;i < temp.size();i += 2){
res2 += temp.mid(i,2) + " ";
}
res2 = res2.trimmed();//去除開頭和結尾的空格
//qDebug()<<"res2:"<
2.2 QString轉QByteArray
QString str = "江雪韓";
QByteArray res = str.toUtf8();//中文
//qDebug()<<"res:"<(res);
QString str2 = "jxh";
QByteArray res2 = str2.toLatin1();//英文
//qDebug()<<"res2:"<(res2);
2.2.1 16進制的QString轉QByteArray:
思路:先轉為10進制的int,再轉為QByteArray
QString str = "0x0A";
bool ok;
int num = str.toInt(&ok, 16);
//qDebug()<<"num:"<
QByteArray res;
res.append((num&(0xff000000))>>24);
res.append((num&(0x00ff0000))>>16);
res.append((num&(0x0000ff00))>>8);
res.append(num&(0x000000ff));
//qDebug()<<"res:"<
3 QString和int
3.1 QString轉int
bool ok = true;
QString str("123456");
int num = str.toInt(&ok, 10);//10可以換成任何想轉的進制
// qDebug()<<"num:"<
3.2 int轉QString
int num = 10;
QString str = QString::number(num);
//qDebug()<<"str:"<
4 結構體轉QByteArray
typedef struct
{
unsigned char MessageHeader; /*消息頭結構體*/
unsigned char MessageTail; /*消息尾結構體*/
}PicMessageRequestTypeDef;
PicMessageRequestTypeDef answer;
QByteArray answerMsg;
answerMsg.append((char*)&answer, sizeof(answer));
5 char*和QByteArray
5.1 char*轉QByteArray
char* c = new char[4];
strcpy(c ,"jxh");
//qDebug()<
//qDebug()<
QByteArray res = QByteArray::fromRawData((char*)c, strlen(c));
//qDebug()<<"res:"<
5.2 QByteArray轉char*
char* c;
QByteArray arrayData;
arrayData.append(0x68);
arrayData.append(0x72);
c = arrayData.data();
// qDebug()<
6 QByteArray和unsigned char *
6.1 QByteArray轉unsigned char *
QByteArray arrayData;
unsigned char *res = reinterpret_cast<unsigned char*>(arrayData.data());
6.2 unsigned char *轉 QByteArray
QByteArray arrayData;
arrayData.append(0x68);
arrayData.append(0x72);
unsigned char * p = (unsigned char *)arrayData.data();
7 string和QString
7.1 string轉QString
QString str = "jiangxueHan";
std::string s = str.toStdString();
7.2 QString轉string
std::string s = "jiangxueHan";
QString str = QString::fromStdString(s);
//qDebug()<<"str:"<
8 QString和char*
8.1 QString轉char*
8.1.1 法一
QString str = "江雪韓";
std::string s = str.toStdString();
const char* c = s.c_str();
qDebug()<<"c:"<<c;
8.1.1 法二
QString先轉為QByteArray,再轉為char*
QString str = "江雪韓";
QByteArray res = str.toUtf8();//中文
//qDebug()<<"res:"<(res);
QString str2 = "jxh";
QByteArray res2 = str2.toLatin1();//英文
//qDebug()<<"res2:"<(res2);
char* c = res2.data();
8.2 char*轉QString
char* c = new char[15];
strcpy(c, "jiangxueHan");
QString str = static_cast<QLatin1String>(c);
qDebug()<<"str:"<<str;
char* c = new char[15];
strcpy(c, "江雪韓");
QString str =QString::fromUtf8(c);
//qDebug()<<"str:"<