Symbian 中的字串

2021-04-13 21:33:40 字數 1475 閱讀 5260

symbian 中的字串根據儲存來分,可以分為兩大類,8位和16位字串。如果只處理,英文,數字什麼的當然8位就夠了。可是在中國,肯定不可避免的要處理中文。在 symbian系統裡,中文或者其他各種複雜的文字都必須使用unicode來處理,每個字用2個位元組進行儲存,因此就產生了16位的字串。一般我們都直接處理16位字串。

即使是16位的字串,又分為tdes16, tdesc16,tbuf16,tbufc16,hbufc16等等一堆,常常讓你看著無從入手。其實不考慮他們各自的實現,我們可以這樣理解:tdes 為虛基類,然後tbuf和hbuf都是由tdes派生。當然這只是為了理解方便,具體symbian底層到底是如何實現的,我們就不在此討論了。

tdes:

我們將tdes理解成乙個字串的虛基類,symbian介面中用到字串的api,基本都是用tdes或者tdesc的引用作為引數。有沒有『c』的差別其實就是「const」,tdesc是const字串。tdes是無法直接建立的,只能通過其它字串型別獲得,因此我們將其理解為虛基類。

tbuf:

tbuf類是乙個模板類,模板引數要求是該字串的最大長度。該字串類是分配在記憶體棧上的,因此不建議分配過大的字串,防止棧溢位或分配失敗,而且一般作為臨時字串變數來使用,建議使用後就盡快釋放。同理,tbuf和tbufc的差別也只是「const」的差別。

hbufc:

hbufc 雖然也有乙個『c』,但是它並非const的意思,不知道設計symbian的人員為何起這麼乙個容易讓人誤解的名字。開頭用『h』字母,應該很清楚的說明了,該字串是從記憶體堆(heap)分配而來的。因此,這個字串必須用new操作來分配,而不能直接生成例項。

另外,hbuc字串建立的時候,不能用普通的new操作,而必須使用hbucfc類自己的static成員——new、newl或newlc。了解 symbian機制的同學,應該都知道,symbian的很多類都必須使用自己的new操作來建立,而不能直接使用c++的new操作符,具體的原因我們就不在這裡解釋了。建立的時候,同樣需要指定該字串的最大長度。

tptr:

說了那麼多,那麼對於字串的操作怎麼辦呢?也許你們已經發現了,無論是hbufc還是tbuf,他們都只提供了一些普通的賦值和字串操作,至於更複雜一些的字串操作就沒有了。那我們要做字串鏈結,比較,刪除,插入,替換等等各種操作又該如何做呢,是否直接獲得字串底層的記憶體指標,自己實現?

記住,不到萬不得已,千萬不要直接獲得字串類底層的記憶體指標直接更改。symbian的字串類中除了儲存字串的內容外,還定義了字串的其他各種屬性,如果你直接對記憶體操作的話,其它字串屬性得不到更新,會導致輸出錯誤。

為了解決字串的各種操作處理,symbian為我們提供了tptr類。從命名我們很容易理解,這是乙個指標類。通過該指標類,提供了一系列的字串操作介面,基本上能滿足大家對字串處理的各種要求。

那麼如何轉換成tptr類呢。對於tbuf類,本是就是直接從tptr派生的,我們可以直接將其賦值給tptr例項,以使用tptr介面。而對於hbufc類,則提供了乙個des介面,直接返回tptr例項。

Symbian中的字串 描述符

在傳統的c c 程式設計中,字串通常都是以char陣列的形式來實現,這樣的實現簡單靈活,但是同時也埋下了不小的隱患 操作的時候必須特別小心,否則很容易出現記憶體越界。為了解決這個問題,在symbian中,存在著一組特殊的類來處理字串,這就是描述符類。根據資料的儲存和訪問方式,描述符類可以分成三種 棧...

字串中的最長重複字串

求乙個字串中的最長重複字串 基本思路是利用next陣列來實現 next陣列的定義 就是 字串中第j個字元 必有next j 1個重複 字串,事實上 kmp查詢 求模式串next陣列 就是指求出模式串j個 字元前 最大的重複子串 include include include include defi...

字串 字串中數字子串的求和

題目 給定乙個字串str,求其中全部數字串所代表的數字之和。要求如下 忽略小數點字元,例如 a1.3 其中包含兩個數字1和3.如果緊貼數字子串的左側出現字元 當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,a 1bc 12 其中包含數字 1和12。舉例 str a...