wxWidgets随笔(9)-utf8~wxString存储二进制数据(4)
使用wxString存儲二進制數據
可以使用函數wxString::To8BitData和wxString::From8BitData來存儲二進制數據(即使它包含空值)。
注意,即使允許使用NUL字符,在當前的字符串實現中,有些方法可能無法正確地使用它們。
但是請注意,其他類(如wxMemoryBuffer)更適合此任務。為了處理二進制數據,您可能還需要查看wxStreamBuffer、wxMemoryOutputStream、wxMemoryInputStream類。
與其他字符串類的比較
使用一個特殊的字符串類而不是直接使用C字符串的優勢是如此明顯,以至于有大量這樣的類可用。最重要的優點是需要始終記住為C字符串分配/釋放內存;使用固定大小的緩沖區幾乎不可避免地會導致緩沖區溢出。最后,c++有一個標準的字符串類(std::string)。那么為什么需要wxString呢?有幾個優勢:
效率:由于wxWidgets 3.0 wxString內部默認使用std::string(在Linux、Unix和OS X下的UTF8模式)或std::wstring(在Windows下的UTF16模式)來存儲其內容。因此,wxString將從std::string繼承性能特征。
兼容性:這個類試圖與老的wxWidgets 1結合幾乎完全的兼容性。xx wxString類,一些MFC的CString類的回憶和std::string類90%的功能。
豐富的函數集:wxString中出現的一些函數非常有用,但在其他大多數字符串類中并不存在:例如,wxString::AfterFirst、wxString::BeforeLast、wxString::Printf。當然,也支持所有的標準字符串操作。
wxString對Unicode很友好:它允許輕松地轉換ANSI和Unicode字符串(有關更多細節,請參閱wxWidgets中的Unicode支持),并透明地映射到std::wstring。
由wxWidgets使用:當然,這個類在wxWidgets內部的任何地方都被使用,所以不會因為wxWidgets內部將任何其他字符串類(包括std::string)的對象轉換為wxString而導致性能損失。
然而,也有幾個問題。最重要的一點可能是,通常有幾個函數可以做完全相同的事情:例如,要獲得字符串的長度,可以使用wxString::length()、wxString::Len()或wxString::length()。第一個函數與幾乎所有其他小寫函數一樣,是std::string兼容的。第二個是“本機”wxString版本,最后一個是wxWidgets 1。xx。
那么,使用哪種方法更好呢?強烈建議使用std::string兼容函數!它會使您的代碼更加熟悉其他c++程序員(應該有知識的std:: string但不是wxString),讓你重用相同的代碼在wxWidgets和其他程序(只要typedef wxString std:: string當之外使用wxWidgets)和保持兼容wxWidgets的未來版本可能會開始使用std:: string或早或晚。
在沒有相應std::string函數的情況下,請嘗試使用新的wxString方法,而不是舊的wxWidgets 1。xx變種被棄用,并可能在未來的版本中消失。
總結
以上是生活随笔為你收集整理的wxWidgets随笔(9)-utf8~wxString存储二进制数据(4)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: log4j2 mysql_spring
- 下一篇: 什么不是预防计算机病毒的方法,预防计算机