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