Symbian C 學習之描述符

2021-09-05 19:36:36 字數 3147 閱讀 9900

自從接觸到symbian c++的描述符之後才發現在.net中使用string是一件多麼幸福的事情,雖然symbian c++難的不僅僅是描述符,下面對其進行簡單整理讓後來者不至於那麼暈。

一、概念-什麼是描述符?

1、描述符是symbian c++字串的描述類,不同於string,它既可以表示字串,也可以表示二進位制資料;

2、同時支援8位和16位,但是用來儲存字串時並不需要指定哪種型別 ,而是由編譯時的設定決定

#if defined(_unicode)

typedef tptrc16 tptrc

else

typedef tptrc8 tptrc

但當它用來儲存二進位制資料時通常使用8位版本。

二、細說描述符的型別

簡單地說,描述符可以分為五大類,分別是抽象描述符、文字描述符、緩衝區描述符、指標描述符和堆緩衝區描述符。它們的特點和適用場景都各不相同,下面進行一一介紹。

1、抽象描述符

抽象描述符包含tdesc和tdes,tdes是從tdes派生的,因為這些類是抽象的,所以不能例項化,它們多數用於函式引數。tdesc是所有描述符的基類,而tdes與tdesc不同的是tdes可以對資料進行修改,並引入資料最大長度的概念。因為它是所有描述符的基類,因此,後面在描述其他描述符的同時會對它的功能進行介紹。

2、文字描述符

文字描述符是我們用的比較多,它主要用來儲存字串常量,如下:

_lit(khelloworld,"hello world!");

當使用_lit()巨集的時候,產生的其實是乙個tlitc物件(8位或16位),資料實際上被儲存在裝載到ram的二進位制應用程式內,雖然它們實際上並不儲存在rom(或與rom類似的快閃儲存器)中,所以可以把它們看成是唯讀的。

可以使用()操作符將描述符轉換成常量的tdesc物件,比如:

tint length=khelloworld().length()

3、緩衝區描述符

緩衝區描述符tbufc和tbuf將它們的資料儲存為本身的一部分,既然該描述符使用在編譯時就確定的固定數量的記憶體,因此可以在棧上對其進行宣告(作為區域性或者成員變數),這裡看個小例子。

_lit(khelloworld,"hello world");

const tint maxbuf=32;

...tbufcbuf;//空緩衝器,長度為0,從這裡也可以看得出,緩衝描述符一定要宣告乙個長度。

tint currentlen=buf.length();//==0

buf=khelloworld;//在建構函式之後設定內容

currenlen=buf.length();//==11

ttext ch=buf[2]//=="l"

這裡要注意的是tbufc是tdesc的子類,而tbuf是tdes的子類,因此tbuf也提供了修改資料等的多種功能。後面會總結它的修改的方法。

4、指標描述符

指標描述符tptrc和tptr用於引用儲存在別處的、不屬於該描述符所擁有的資料。使用tptr或者tptrc來訪問字串比維護指向零值終止(zero-terminated)字串指標更加安全。下面是乙個小例子:

_lit(khelloworld,"hello world");

tbufcbuf;

buf=khelloworld;//設定內容

tptr ptr=buf.des();//取得指向該緩衝器的指標

ptr[7]='a';//將『0』變成'a'

ptr[8]='l';//將『r』變成'l'

ptr[9]='e';//將'l'變成『e』

ptr[10]='s';//將『d』變成『s』

//現在緩衝器的內容為「hello wales」

5、堆緩衝區描述符

堆描述符hbufc封裝了儲存在堆上的、屬於該描述符所擁有的資料。由於這些資料是動態分配的,因此通過重新分配堆緩衝器,可以在執行時對描述符的最大長度進行設定很改變。

bufc是基於tdesc,並且提供了方法來改變所儲存資料的長度(hbufc::realloc()和hbufc::reallocl()),以及賦值操作來設定資料的內容(受限於最大長度,不能超過最大長度)。可以通過使用hbufc::des()獲取可修改指標描述符來修改描述符的內容,下面是乙個小例子:

_lit(khelloworld,"hello world!");

hbufc *heapbuf=hbufc::newl(kelloworld().length());//宣告乙個長度為khelloworld長的堆描述符

*heapbuf=khelloworld;

delete heapbuf;

三、幾種描述符總結

1、描述符都有的方法:

locate():    定位指定字元的位置;

compare(): 按位元組比較兩個描述符大小

match():     搜尋指定描述符的位置,可使用? *等萬用字元

find():       搜尋指定描述符在當前描述符中第一次出現的位置

left():       提取描述符最左邊的資料

right():     提取描述符最右邊的資料

mid():        提取描述符中間的位置

2、只有tptr和tbuf才有的函式

lowercase():將描述符轉為小寫字母

uppercase():將描述符轉為大寫字母

insert():在指定位置插入新的描述符

delete():在指定位置刪除指定長度個資料項

3、描述符的典型用法:

1、tbuf/tbufc:棧上的小資料量儲存

2、tptrc:常量字串或資料

3、tptr:指向常量字串或資料,通過des()方法進行資料修改

4、hbufc:大資料量時的處理

mysql 檔案描述符 檔案描述符

toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...

linux之檔案描述符

檔案描述符是乙個非負整數。按照慣例,unix系統shell把檔案描述符0與程序的標準輸入關聯,檔案描述符1與標準輸出關聯,檔案描述符2與標準錯誤關聯。當應用程式開啟乙個現有檔案或者建立乙個新檔案時,核心會向程序返回乙個檔案描述符。對於核心而言,所有開啟的檔案都通過檔案描述符引用。上圖基本描繪出了檔案...

檔案描述符

檔案描述符 是個很小的正整數,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。檔案描述符的優點 相容posix標準,許多 linux 和unix 系統呼叫都依賴於它。檔案描述符的缺點 不能移植到unix以外的系統上去,也不直觀。基於檔案描述符的輸入輸出函式 open 開啟乙個檔案...