QString與char 的相互轉換

2021-09-27 04:26:24 字數 3775 閱讀 8246

在進行程式設計時,我們經常需要用到字串這種型別,毫無疑問,qt 庫中也對字串型別進行了封裝,qstring 類提供了你能想到的所有字串操作方法,給開發者帶來了極大方便。 

但是我們在編寫程式時,不可避免地會在 qt 框架上使用第三方的開源庫,由於庫的型別基本上都是標準的型別,即使用 char * 來表示字串型別。那麼問題來了,qstring 和 char * 之間如何進行轉換呢?

下面分兩種情況進行說明。

一、qstring 轉換為 char *

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

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

方法如下:

qstring

str;

char

* ch;

qbytearray ba =

str.tolatin1();

// must

ch=ba.data();

這樣就完成了 qstring 向 char * 的轉化。經測試程式執行時不會出現 bug。注意第3行,一定要加上,不可以 str.tolatin1().data() 這樣一步完成,否則可能會出錯。 

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

方法1:

新增gbk編碼支援:

#include

<

qtextcodec

>

qtextcodec

::setcodecfortr(qtextcodec

::codecforname(

"gbk"

));

qtextcodec

::setcodecforlocale(qtextcodec

::codecforname(

"gbk"

));

然後將上面的第3行修改為:

qbytearray ba = str.tolocal8bit();  // tolocal8bit 支援中文

方法2:

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

qstring filename;

std::

string

str = filename.tostdstring();

const

char

* ch =

str.c_str();

二、 char * 轉換為 qstring

將 char * 轉換為 qstring 比較容易操作,我們可以使用 qstring 的建構函式進行轉換:

qstring(const

qlatin1string &str);

qlatin1string 的建構函式:

qlatin1string(const

char

*str);

因此用下面這個語句就可以將 char * ch 轉換為 qstring str 了,如下:

str =qstring(qlatin1string(ch));

在進行程式設計時,我們經常需要用到字串這種型別,毫無疑問,qt 庫中也對字串型別進行了封裝,qstring 類提供了你能想到的所有字串操作方法,給開發者帶來了極大方便。 

但是我們在編寫程式時,不可避免地會在 qt 框架上使用第三方的開源庫,由於庫的型別基本上都是標準的型別,即使用 char * 來表示字串型別。那麼問題來了,qstring 和 char * 之間如何進行轉換呢?

下面分兩種情況進行說明。

一、qstring 轉換為 char *

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

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

方法如下:

qstring

str;

char

* ch;

qbytearray ba =

str.tolatin1();

// must

ch=ba.data();

這樣就完成了 qstring 向 char * 的轉化。經測試程式執行時不會出現 bug。注意第3行,一定要加上,不可以 str.tolatin1().data() 這樣一步完成,否則可能會出錯。 

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

方法1:

新增gbk編碼支援:

#include

<

qtextcodec

>

qtextcodec

::setcodecfortr(qtextcodec

::codecforname(

"gbk"

));

qtextcodec

::setcodecforlocale(qtextcodec

::codecforname(

"gbk"

));

然後將上面的第3行修改為:

qbytearray ba = str.tolocal8bit();  // tolocal8bit 支援中文

方法2:

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

qstring filename;

std::

string

str = filename.tostdstring();

const

char

* ch =

str.c_str();

二、 char * 轉換為 qstring

將 char * 轉換為 qstring 比較容易操作,我們可以使用 qstring 的建構函式進行轉換:

qstring(const

qlatin1string &str);

qlatin1string 的建構函式:

qlatin1string(const

char

*str);

因此用下面這個語句就可以將 char * ch 轉換為 qstring str 了,如下:

str =qstring(qlatin1string(ch));

QString與char 的相互轉換

在進行程式設計時,我們經常需要用到字串這種型別,毫無疑問,qt 庫中也對字串型別進行了封裝,qstring 類提供了你能想到的所有字串操作方法,給開發者帶來了極大方便。但是我們在編寫程式時,不可避免地會在 qt 框架上使用第三方的開源庫,由於庫的型別基本上都是標準的型別,即使用 char 來表示字串...

QString與char 的相互轉換

在進行程式設計時,我們經常需要用到字串這種型別,毫無疑問,qt 庫中也對字串型別進行了封裝,qstring 類提供了你能想到的所有字串操作方法,給開發者帶來了極大方便。但是我們在編寫程式時,不可避免地會在 qt 框架上使用第三方的開源庫,由於庫的型別基本上都是標準的型別,即使用 char 來表示字串...

QString與char 的相互轉換

在進行程式設計時,我們經常需要用到字串這種型別,毫無疑問,qt 庫中也對字串型別進行了封裝,qstring 類提供了你能想到的所有字串操作方法,給開發者帶來了極大方便。但是我們在編寫程式時,不可避免地會在 qt 框架上使用第三方的開源庫,由於庫的型別基本上都是標準的型別,即使用 char 來表示字串...