Ogre引擎原始碼 UTFString

2021-05-24 10:35:09 字數 1366 閱讀 3853

繼續上次ogre的string篇未完的乙個檔案解讀,unicode string實現類utfstring。

該部分標頭檔案

ogreutfstring.h

雖然只有乙個檔案,但實現內容很多,不具體列出所有實現細節,盡量理清主要的實現思路,學習一下對unicode字元不同編碼的轉換。

關於unicode編碼和實現可以參看《unicode字元編碼》。

首先給出一些typedef

定義了unicode_char為4個位元組,code_point是utf-16的兩位元組編碼。

dstring是utfstring的data string,是該類最重要的存放資料格式。

utf32string是用於返回utf-32格式資料,在utfstring中,大多數返回的是utf-32格式的字元結果。

utfstring主要資料部分如下

可以看到,mdata是乙個dstring型別的,存放的utf-16格式的字元,這也是windows下預設unicode的儲存方式。

另乙個非常重要的就是乙個聯合型別的字元buffer。這個buffer的作用就是當外部需要得到這個utfstring的其他編碼型別時,就在這個buffer中轉換,然後返回結果。對應的轉換函式名為asutf8、asutf32、aswstr。

utfstring宣告了內嵌迭代器類來完成輔助字串基本操作。

迭代器類uml圖如下

基礎_base_iterator繼承自std::iterator,實現了utfstring基礎的前向移動,後向移動,設定和讀取單個字元。

這裡需要自己實現迭代器的原因是讓該迭代器適用於utf-16編碼的字串,使得每次移動的單位都是2個位元組。在處理utf-16需要注意當前字元是否是4位元組的情況,即需要一次移動4個位元組。

4個子類迭代器擴充套件實現了前向和後向移動多個位元組、自增、自減等操作。

擁有了基礎操作的迭代器後,就可以實現string的標準操作了。utfstring中實現了幾乎所有std::string的成員函式,如find,assign,replace,insert等。由於不同編碼形式的存在,所有函式的編寫思路都是先轉換成utf-32,再轉換成utf-16後,對dstring進行操作。也正因為此,utfstring中並沒有給出utf-16與utf-8之間的轉換,而是實現了utf-16與utf-8分別對於utf-32的轉換,以utf-32為轉換紐帶。具體實現的函式是_utf16_to_utf32、_utf32_to_utf16、_utf8_to_utf32和_utf32_to_utf8。

轉換的**比較固定,在此就不給出了。

下面有個不錯的部落格用c++實現了unicode的轉換,也可參考。其實轉換編碼的**過程基本都是一樣的。

OGRE 原始碼編譯問題 集合

ogre 原始碼編譯。怕有人找不到 標題中加 choose rendering subsystem 方便 搜尋哈。如果你的ogre 1.7 原始碼不能編譯通過,且你使用的 vs2005 那麼請看下面的 解決步驟 1 檢查是否安裝了所需要的補丁?vs2005 需要安裝 一下兩個補丁。vs80sp1 k...

OGRE開源遊戲引擎

ogre引擎 ogre官方 關於ogre 翻譯自index.php?option com content task view id 19 itemid 79 一 什麼是ogre?ogre object oriented graphics rendering engine,即 物件導向圖形渲染引擎 是...

Nmap原始碼分析(指令碼引擎)

2012年9月6日 nmap提供了強大的指令碼引擎 nse 以支援通過lua程式設計來擴充套件nmap的功能。目前指令碼庫已經包含300多個常用的lua指令碼,輔助完成nmap的主機發現 埠掃瞄 服務偵測 作業系統偵測四個基本功能,並補充了其他掃瞄能力 如執行http服務詳細的探測 暴力破解簡單密碼...