Qt學習筆記 QByteArray Class

2021-08-03 02:40:25 字數 4821 閱讀 3279

提供乙個位元組陣列,qbytearray可用於儲存原始位元組(包括「\ 0」 )和傳統的8位 「\ 0」 端接字串 . 使用qbytearray比使用const char *更方便.

除了qbytearray之外,qt還提供了qstring類來儲存字串資料。對於大多數用途,qstring是您要使用的類。它儲存16位unicode字元,使您可以輕鬆地在應用程式中儲存非ascii /非拉丁字元。此外,qst api在qt api中始終使用。

qbytearray適合的兩個主要情況是當您需要儲存原始二進位制資料,並且當記憶體保護至關重要時(例如,使用嵌入式linux的qt)

初始化qbytearray的一種方法是const char *將其傳遞給其建構函式。例如,以下**建立乙個大小為5的位元組陣列,

其中包含資料「hello」:

qbytearray ba("hello");
雖然size()為5,但是位元組陣列在最後還會保留乙個額外的』\ 0』字元,

以便如果使用乙個函式來請求指向底層資料的指標(例如呼叫data()),那麼指出的資料保證被』\ 0』終止。

另一種方法是使用resize()設定陣列的大小,並初始化每個位元組的資料位元組.

qbytearray使用基於0的索引,就像c ++陣列一樣。

要訪問特定索引位置的位元組,可以使用operator ()在非 常量位元組陣列上,operator 返回乙個可以在賦值左側使用的位元組的引用。例如:

qbytearray ba;

ba.resize(5);

ba[0] = 0x3c;

ba[1] = 0xb8;

ba[2] = 0x64;

ba[3] = 0x18;

ba[4] = 0xca;

//對於唯讀訪問,替代語法是使用at():

for (int i = 0; i < ba.size(); ++i)

at()可以比operator ()更快,因為它不會導致深層拷貝發生。

要一次提取多個位元組,請使用 left(),right() 或mid()。

qbytearray可以嵌入「\0」 位元組,size()函式總是返回整個陣列的大小,包括嵌入的』\ 0』位元組,但不包括qbytearray新增的終止』\ 0』.

呼叫resize()後,新分配的位元組具有未定義的值。 要將所有位元組設定為特定值,請呼叫fill()。

要獲取指向實際字元資料的指標,請呼叫data()或constdata()。這些函式返回乙個指向資料開頭的指標。

指標保持有效,直到在qbytearray上呼叫了非const函式。除了從原始資料建立qbytearray之外,還保證資料以」\ 0」位元組結尾。這個』\ 0』位元組由qbytearray自動提供,並不會在size()中計算。

qbytearray x("and");

x.prepend("rock "); // x == "rock and" 前置

x.replace(5, 3, "&"); // x == "rock & roll" 替代

這個 replace() 和remove()函式,前兩個引數是從其開始擦除的位置和應該被擦除的位元組數。

乙個常見的要求是從位元組陣列(』\ n』,』\ t』,』等)中刪除空白字元,如果要從qbytearray兩端刪除空格,請使用trimmed()。

如果要從兩端移除空格並用字元陣列中的單個空格替換多個連續的空格,請使用simplified()。

如果要查詢qbytearray中特定字元或子字串的所有出現,請使用indexof()或lastindexof()。

indexof()從給定的索引位置開始搜尋,lastindexof()向後搜尋。兩者返回字元或子字串的索引位置,

如果它們找到它; 否則返回-1 。例如,這是乙個典型的迴圈,它查詢特定子字串的所有出現:

qbytearray

ba("we

must

beboldb>, veryboldb>");

int j = 0;

while ((j = ba.indexof("", j)) != -1)

如果您只想檢查qbytearray是否包含特定字元或子字串,請使用contains()。

如果要查詢位元組陣列中特定字元或子字串的次數,請使用count()。

如果要將特定值的所有出現替換為另乙個,請使用兩個引數replace()過載之一。

可以使用運算子<(),運算子<=(),運算子==(),運算子》=()等過載運算子來比較qbytearray。比較完全基於字元的數值,非常快,但不是我們期望的。qstring :: localeawarecompare()是排序使用者介面字串的更好選擇。

由於歷史原因,qbytearray區分了乙個null byte 和 empty byte. 我們建議您始終使用isempty().

(1).

返回指向位元組陣列中儲存的資料的指標。該指標可用於訪問和修改組成陣列的位元組。具體訪問位元組陣列中的某乙個,採用ba.data()[0]–>訪問第0個

qbytearray ba("hello world");

char *data = ba.data

();//返回乙個指向位元組陣列ba的資料指標,指向第乙個字元

qdebug() << ba.data

();//列印整個字元

while (*data)

得到結果 [ h ] ,[ e ] ,[ l ] ,[ l ] ,[ o ], [ ], [ w ] ,[ r ] ,[ l ] ,[ d ].

將位元組陣列中的每個位元組設定為字元ch。如果size與-1(預設值)不同,則位元組陣列將預先調整為大小。

qbytearray ba("istambul");

ba.fill('o');

// ba == "oooooooo"

ba.fill('x', 2);

// ba == "xx"

返回該位元組陣列中第一次出現位元組陣列ba的索引位置,從索引位置向前搜尋。如果找不到ba,則返回-1 。

eg:

qbytearray x("sticky question");

qbytearray y("sti");

x.indexof(y); // returns 0

x.indexof(y, 1); // returns 10

x.indexof(y, 10); // returns 10

x.indexof(y, 11); // returns -1

如果位元組陣列的大小為0,返回true; 否則返回false。

返回乙個包含該位元組陣列最左側len個位元組的位元組陣列,如果len大於size(),則返回整個位元組陣列.

eg: qbytearray y = x.left(4); // y == "pine"

返回乙個位元組陣列,其中包含等價於數字n到基數的字串(預設為10)。基數可以是2到36之間的任何值。

eg:

int n = 63;

qbytearray::number(n); // returns "63"

qbytearray::number(n, 16); // returns "3f"

qbytearray::number(n, 16).toupper(); // returns "3f"

可以理解為 int 型別到qbytearray型別的轉化。

將位元組陣列設定為基數為n的列印值(預設為10)並返回對位元組陣列的引用。基數可以是介於2和36之間的任何值。對於非10以外的其他值,n被視為無符號整數。

eg:

qbytearray ba;

int n = 63;

ba.setnum(n); // ba == "63"

ba.setnum(n, 16); // ba == "3f"

返回此位元組陣列中的位元組數。

eg:

qbytearray ba("hello");

int n = ba.size(); // n == 5

ba.data

()[0]; // returns 'h' 操作某一位的方法

ba.data

()[4]; // returns 'o'

ba.data

()[5]; // returns '\0'

(9)

double qbytearray::todouble(bool *ok = q_nullptr) const

float qbytearray::tofloat(bool *ok = q_nullptr) const

int qbytearray::toint(bool *ok = q_nullptr, int base = 10) const

返回轉換為double值的位元組陣列。

eg:

qbytearray string("1234.56");

double a = string.todouble(); // a == 1234.56

返回位元組陣列的十六進製制編碼副本。十六進製制編碼使用數字 0 - 9 和字母 a - f。

see also fromhex().

返回std :: string物件,帶有qbytearray中包含的資料的.

Qt中關於多位元組資料與QByteArray的轉化

今天在工作中遇到了乙個比較煩的內容,就是儲存乙個可變長度的多位元組。本質實際就是儲存乙個可變長度的陣列,還要保留原先的位元組數目。其實想了幾種方法,但是最終確定了一種方法,就是呼叫qbytearray乙個自己本身的方法 qbytearray const char str,int len 這個函式的作...

Qt學習筆記

1.參考資料 1 2 3 4 5 6 2.faq 2.1.qt creator 2.1.1.xp下用qt creator編譯自帶例子mdi sdi 當不勾選projects build settings build environment的 clear system environment 時,編譯...

QT學習筆記

1.在windows下配置好qt的環境變數以後,用cmd開始編譯,qmake project qmake hello.pro mingw32 make 結果出現錯誤 include 問題已經解決了,主要是 故而只需在.pro檔案中加入 greaterthan qt major version,4 q...