QString 和 其他 C 語言型別的轉換

2021-06-22 14:00:12 字數 1619 閱讀 1456

qstring::number(a, 10);

qstring::number(a, 16).toupper();

long

a = 63; 

qstring s = qstring(

"%1"

).arg(a);  

qstring str=

"123.45"; 

double

val=str.todouble(); 

//val=123.45

qstring str="ff";

bool ok;

int dec=str.toint(&ok,10); //dec=255 ; ok=rue

int hex =str.toint(&ok,16); //hex=255;ok=true;

const char *p = qstr.tostdstring().data();

qstring str="r2d2";

bool ok;

float d=str.tofloat(&ok); //轉換是被時返回0.0,ok=false;

qstring qstr("hello,word");

const char * p = qstr.tolocal8bit().data();

qt下面,字串都用qstring,確實給開發者提供了方便,想想vc裡面定義的各種變數型別,而且函式引數型別五花八門,經常需要今年新那個型別轉換

qt再使用第三方開源庫時,由於庫的型別基本上都是標準的型別,字串遇的多的就是char*型別

在qt下怎樣將qstring轉char*呢,需要用到qbytearray類,qbytearray類的說明詳見qt幫助文件。

因為char*最後都有乙個『/0』作為結束符,而採用qstring::tolatin1()時會在字串後面加上『/0』

方法如下:

qstring  str;

char*  ch;

qbytearray ba = str.tolatin1();    

ch=ba.data();

這樣就完成了qstring向char*的轉化。經測試程式執行時不會出現bug

注意第三行,一定要加上,不可以str.tolatin1().data()這樣一部完成,可能會出錯。

補充:以上方法當qstring裡不含中文時,沒有問題,但是qstring內含有中文時,轉換為char*就是亂碼,採用如下方法解決:

方法1:

新增gbk編碼支援:

#include

qtextcodec::setcodecfortr(qtextcodec::codecforname("gbk"));

qtextcodec::setcodecforlocale(qtextcodec::codecforname("gbk"));

然後改變上面的第三行為:qbytearray ba = str.toloacl8bit();      toloacl8bit支援中文

方法2:

先將qstring轉為標準庫中的string型別,然後將string轉為char*,如下:

std::string str = filename.tostdstring();

const char* ch = str.c_str();

C結構和其他資料型別

1 結構宣告和變數宣告 struct name struct name val 列 宣告變數 struct book library 簡化宣告變數 struct book library 初始化結構體 struct book library 指定初始化器 struct book surprise 2...

C 類 型別和其他型別相互轉換

類型別轉換時會出現兩種之間轉換,下面我們說的是類型別 通過類帶乙個引數的建構函式 或者多個引數建構函式,除了第乙個引數後面引數都有預設值時!這樣在其他型別賦值給該類型別物件時會發生隱式轉換。include include using namespace std class test test int...

QString和string型別相互轉換

在使用qt和c 進行開發的時候,由於兩者的資料型別不完全相同,需要進行轉換。下面介紹qstring和string型別相互轉換的方法。qt4.6上已測試可用。1 在標頭檔案中新增inlucde資訊和轉換函式宣告 cpp view plain copy include include include i...