最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

深入了解UE4中的FString

2023-06-23 00:06 作者:游戲王luffy  | 我要投稿

FString是UE4中常用的字符串類型,它不僅可以存儲文本數(shù)據(jù),還可以進行各種數(shù)據(jù)類型的轉(zhuǎn)換。本文將介紹FString的定義和使用方法,以及如何將其他數(shù)據(jù)類型轉(zhuǎn)換為FString,幫助讀者更好地理解和使用UE4中的FString。

# 01

FString的定義

通過查看UE4源碼,我們可以在FString類的聲明中看到以下代碼,即FString中的字符串本質(zhì)是TCHAR類型的數(shù)組(UE4中稱為TArray,類似于STL中的vector),并在此基礎上完成各種字符串操作。

TCHAR是一個宏定義,它用于在C/C++中表示字符類型。TCHAR的定義通常包括char和wchar_t類型,這使得代碼能夠兼容ANSI字符集和寬字符集。即當一個字符被聲明為TCHAR類型時,如果在編譯器中使用的是Unicode,則TCHAR解析為wchar_t類型。反之,則TCHAR解析為char類型,實現(xiàn)了不同編碼平臺的自動移植。

TEXT宏:在使用FString進行初始化或者賦值的時候,經(jīng)常會看到用TEXT宏包裹字符串字面量:

這里又會出現(xiàn)另一個宏TEXT,這個宏的作用和TCHAR宏本質(zhì)是一樣的,自動根據(jù)編譯器設置來選擇char類型或w_char類型,區(qū)別在于TEXT宏是作用于字符串字面量的。在UE4編碼規(guī)范中,如果沒有使用TEXT宏,則將字符串字面量并不會根據(jù)編譯器自動選擇編碼,而是采用默認編碼方式,導致字符串字面量在移植時可能出現(xiàn)亂碼問題,甚至將默認編碼格式的字符串字面量賦值給FString變量時,也會由于編碼方式不一致導致亂碼。

運行代碼,可以看到以下預期結果

# 02

FString和其他數(shù)據(jù)格式相互轉(zhuǎn)換

這里字符串和其他數(shù)據(jù)類型轉(zhuǎn)換,可以分為三類,分別是FString與FName、FText轉(zhuǎn)換,F(xiàn)String與通用C++字符串類型的轉(zhuǎn)換以及FString與非字符數(shù)據(jù)類型的轉(zhuǎn)換。

2-1 FString與FName、FText轉(zhuǎn)換

  • FString和FName相互轉(zhuǎn)換

  • FString和FText相互轉(zhuǎn)換

2-2?FString和C++相關字符串類型轉(zhuǎn)換

  • FString和TCHAR*,const TCHAR相互轉(zhuǎn)換

    TCHAR*和FString轉(zhuǎn)換是比較簡單的,因為FString就是封裝的TCHAR數(shù)組,而TCHAR*類型也成為FString和char*類型轉(zhuǎn)換的過度;

    const TCHAR*僅需把FString解引用即可得到;????

    TCHAR* 可以通過FString成員函數(shù)GetCharArray().GetData()得到;????

    const TCHARr*和TCHAR*可以直接賦值給FString

  • FString和char*,const char*相互轉(zhuǎn)換

    FString和char*,const char*指針轉(zhuǎn)換通過宏定義來實現(xiàn)

  • FString和string相互轉(zhuǎn)換

C++中,string類型也是char*,因此FString和string轉(zhuǎn)換也是使用TCHAR_TO_UTF8和UTF8_TO_TCHAR宏實現(xiàn)。

  • FString和TArray<uint8*>

    在UE4中,uint8類型就是usigned char

    而uint8數(shù)組或者uint8*相當于FString字符串字面量的編碼結果;通過char*或者std::string可以將uint8*轉(zhuǎn)換為char*,再從char*轉(zhuǎn)FString。

循環(huán)打印出轉(zhuǎn)換后的TArray數(shù)組內(nèi)容,剛好是字符“1”“2”“3”“4”對應的ASCII碼49,50,52;而將TArray中的98,99,101轉(zhuǎn)換為字符串后,剛好是對應的字符bce。

  • FArrayReaderPtr、FBufferArchive和FString

    FArrayReaderPtr、FBufferArchive也是UE4中特有的類,不過放在這里介紹,是因為它的轉(zhuǎn)換以uint8*為基礎進行的。將FArrayReaderPtr或者FBufferArchive轉(zhuǎn)FString,先將FArrayReaderPtr或者FBufferArchive中的內(nèi)容拷貝到uint8數(shù)組中,再通過上面介紹的方法從uint8數(shù)組轉(zhuǎn)FString;如下,F(xiàn)BufferArchive對象Writer存放的是\x1,16進制的1,也對應ASCII碼的編碼1,轉(zhuǎn)換為FString對象Writer2String后,也是\x1;

  • FString和ascii碼相互轉(zhuǎn)換

98對應的ascii碼是b,20013對應的ascii碼是漢字“中”。


2-3?FString和非字符數(shù)據(jù)類型轉(zhuǎn)換

其實從int、float等常用數(shù)據(jù)類型轉(zhuǎn)換到字符串,可以利用FString::Printf格式化即可。

  • FString和bool類型轉(zhuǎn)換

通過查看ToBool的底層實現(xiàn),分析FString是如何轉(zhuǎn)換為bool值的:

如果字符串是“True”、“Yes”,“On”將返回true;

如果字符串是“False”,“No”,“Off”將返回false;如果字符串是純數(shù)字的,轉(zhuǎn)換為int32類型,根據(jù)int32的值返回tru或者false;

其他的情況則都返回false;

  • FString和int32相互轉(zhuǎn)換

  • FString和int64相互轉(zhuǎn)換


# 03

小結

  • FStirng本質(zhì)上是TArray<TCHAR>數(shù)組

  • 以TCHAR*為過渡,可以轉(zhuǎn)換為char*,uint8*等通用C++字符串類型

  • float,int32、int64等數(shù)據(jù)類型轉(zhuǎn)換為FString時,除了特有的函數(shù)外,都可以使用FString::Printf實現(xiàn)。



深入了解UE4中的FString的評論 (共 條)

分享到微博請遵守國家法律
尉氏县| 西华县| 商丘市| 阿坝县| 镇雄县| 浙江省| 沾益县| 图木舒克市| 南陵县| 景德镇市| 高碑店市| 唐海县| 旅游| 福泉市| 金阳县| 龙岩市| 兰坪| 西华县| 江安县| 馆陶县| 锦州市| 澎湖县| 永顺县| 镶黄旗| 庆元县| 富蕴县| 望城县| 定远县| 石棉县| 正蓝旗| 湘潭市| 沙坪坝区| 绥中县| 新绛县| 衡阳县| 海原县| 什邡市| 车险| 南阳市| 鄂温| 吉林市|