FString是UE4中常用的字符串类型,它不仅可以存储文本数据,还可以进行各种数据类型的转换。本文将介绍FString的定义和使用方法,以及如何将其他数据类型转换为FString,帮助读者更好地理解和使用UE4中的FString。

# 01
FString的定义
通过查看UE4源码,我们可以在FString类的声明中看到以下代码,即FString中的字符串本质是TCHAR类型的数组(UE4中称为TArray,类似于STL中的vector),并在此基础上完成各种字符串操作。
TCHAR是一个宏定义,它用于在C/C++中表示字符类型。TCHAR的定义通常包括char和wchar_t类型,这使得代码能够兼容ANSI字符集和宽字符集。即当一个字符被声明为TCHAR类型时,如果在编译器中使用的是Unicode,则TCHAR解析为wchar_t类型。反之,则TCHAR解析为char类型,实现了不同编码平台的自动移植。
TEXT宏:在使用FString进行初始化或者赋值的时候,经常会看到用TEXT宏包裹字符串字面量:
这里又会出现另一个宏TEXT,这个宏的作用和TCHAR宏本质是一样的,自动根据编译器设置来选择char类型或w_char类型,
区别在于TEXT宏是作用于字符串字面量的
。在UE4编码规范中,如果没有使用TEXT宏,则将字符串字面量并不会根据编译器自动选择编码,而是采用默认编码方式,导致字符串字面量在移植时可能出现乱码问题,甚至将默认编码格式的字符串字面量赋值给FString变量时,也会由于编码方式不一致导致乱码。
运行代码,可以看到以下预期结果
# 02
# 02
FString和其他数据格式相互转换
FString和其他数据格式相互转换
这里字符串和其他数据类型转换,可以分为三类,分别是FString与FName、FText转换,FString与通用C++字符串类型的转换以及FString与非字符数据类型的转换。
2-1 FString与FName、FText转换
2-1 FString与FName、FText转换
-
FString和FName相互转换
-
FString和FText相互转换
2-2 FString和C++相关字符串类型转换
2-2 FString和C++相关字符串类型转换
-
FString和TCHAR*,const TCHAR相互转换
TCHAR*和FString转换是比较简单的,因为FString就是封装的TCHAR数组,而 T CHAR*类型也成为FString和char*类型转换的过度 ;
const TCHAR*仅需把FString解引用即可得到;
TCHAR* 可以通过FString成员函数GetCharArray().GetData()得到;
const TCHARr*和TCHAR*可以直接赋值给FString
-
FString和char*,const char*相互转换
FString和char*,const char*指针转换通过宏定义来实现
-
FString和string相互转换
C++中,string类型也是char*,因此FString和string转换也是使用TCHAR_TO_UTF8和UTF8_TO_TCHAR宏实现。
-
FString和TArray<uint8*>
在UE4中,uint8类型就是usigned char
而uint8数组或者uint8*相当于FString字符串字面量的编码结果 ;通过char*或者std::string可以将uint8*转换为char*,再从char*转FString。
循环打印出转换后的TArray数组内容,刚好是字符“1”“2”“3”“4”对应的ASCII码49,50,52;而将TArray中的98,99,101转换为字符串后,刚好是对应的字符bce。
-
FArrayReaderPtr、FBufferArchive和FString
FArrayReaderPtr、FBufferArchive也是UE4中特有的类,不过放在这里介绍,是因为它的转换以uint8*为基础进行的。将FArrayReaderPtr或者FBufferArchive转FString,先将FArrayReaderPtr或者FBufferArchive中的内容拷贝到uint8数组中,再通过上面介绍的方法从uint8数组转FString;如下,FBufferArchive对象Writer存放的是\x1,16进制的1,也对应ASCII码的编码1,转换为FString对象Writer2String后,也是\x1;
-
FString和ascii码相互转换
98对应的ascii码是b,20013对应的ascii码是汉字“中”。
2-3 FString和非字符数据类型转换
2-3 FString和非字符数据类型转换
其实从int、float等常用数据类型转换到字符串,可以利用FString::Printf格式化即可。
-
FString和bool类型转换
通过查看ToBool的底层实现,分析FString是如何转换为bool值的:
如果字符串是“True”、“Yes”,“On”将返回true;
如果字符串是“False”,“No”,“Off”将返回false;如果字符串是纯数字的,转换为int32类型,根据int32的值返回tru或者false;
其他的情况则都返回false;
-
FString和int32相互转换
-
FString和int64相互转换
# 03
# 03
小结
小结
-
FStirng本质上是TArray<TCHAR>数组
-
以TCHAR*为过渡,可以转换为char*,uint8*等通用C++字符串类型
-
float,int32、int64等数据类型转换为FString时,除了特有的函数外,都可以使用FString::Printf实现。