本文转载自知乎《旺仔好喝》文章(侵删):UE4_最全FString字符串与各格式转换 输出 - 知乎
-
FSting
1.1 FString To FNames
//字符串 FString TheString = "Hello,world"; //将FString转换为FName FName ConvertedFString = FName(*TheString);
1.2 FString To FText
FString TheString = "Hello,world"; FText ConvertedFSting=FText::FromSting(TheString);
1.3 FString To Array[uint8]
//方法1 FString JsonStr; TArray<uint8> content; content.SetNum(JsonStr.Len()); memcpy(content.GetData(), TCHAR_TO_ANSI(*JsonStr), JsonStr.Len()); //方法2 FString StrData; const TCHAR* StrPtr = *StrData; FTCHARToUTF8 UTF8String(StrPtr); int32 CTXSize = UTF8String.Length(); TArray<uint8> URLData; URLData.SetNum(CTXSize); memcpy(URLData.GetData(), UTF8String.Get(), CTXSize);
1.4 FString To char*
FString TheString = "Hello,world"; char* MyCharPtr = TCHAR_TO_UTF8(*MyFString);
1.5 FString To const char *
FString TheString ontent= "Hello,world"; const char *plainText= TCHAR_TO_ANSI(*TheString );
1.6 FString To TCHAR*
FString s="a"; TCHAR* t=*s;
1.7 FString To std::string
#include <string> FString UE4Str = TEXT("Flowers"); std::string MyStdString = TCHAR_TO_UTF8(*UE4Str);
1.8 FString To JsonObject
处理Json需要在.Build.cs中添加Json模块
PrivateDependencyModuleNames.AddRange( new string[] { "CoreUObject", "Engine", "Slate", "SlateCore", "Json", // ... add private dependencies that you statically link with here ... } );
//注意String中使用双引号 FString JsonStr = TEXT("{\"key\":\"value\",\"key2\":\"value2\"}"); TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject); TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(JsonStr); FJsonSerializer::Deserialize(Reader,JsonObject); //JsonObject就是Json
1.9 FString To bool
FString TheString = "123.021"; bool MyBool = MyFString.ToBool();
1.10 FString To int32
FString TheString = "123.021"; //注意,Atoi和Atof是静态函数,所以使用语法FCString::TheFunction调用它:) int32 MyShinyNewInt = FCString::Atoi(*TheString);
1.11 FString To int64
FString TheString = "12312345678789561234879"; //注意,Atoi64是静态函数,所以使用语法FCString::TheFunction调用它:) int64 MyShinyNewInt = FCString::Atoi64(*TheString);
1.12 FString To float
FString TheString = "123.021"; //注意,Atoi和Atof是静态函数,所以使用语法FCString::TheFunction调用它:) float MyShinyNewFloat = FCString::Atof(*TheString);
1.13 FString To double
//函数方式 bool UDoubleFunction::FStringToDouble(FString str,double &num) { std::string numString = TCHAR_TO_UTF8(*str); double b = atof(numString.c_str()); if (b == NULL) { return false; } num =b; return true; } //直接转换 FString TheString = "123.021"; //注意,Atod是静态函数,所以使用语法FCString::TheFunction调用它:) double MyShinyNewFloat = FCString::Atod(*TheString); //FString转String转Double FString str = "113.5246854"; std::string numString = TCHAR_TO_UTF8(*str); double b = atof(numString.c_str());
1.14 基本类型 To FString()
//int FString NewString = FString::FromInt(MyInt); //float //double ----只能精确到小数点后6位 FString VeryCleanString = FString::SanitizeFloat(MyFloat); //bool FString MyFString = MyBool?TEXT("true") :TEXT("false"); //FVector FString MyFString = MyVector.ToString(); //FVector2D FString MyFString = MyVector2D.ToString(); //FRotator FString MyFString = MyRotator.ToString(); //FLinearColor FString MyFString = MyLinearColor.ToString(); //UObject FString MyFString = (MyObj != NULL) ? MyObj->GetName() : FString(TEXT("None")); //FMatrix FMatrix rotationMatrix(FPlane(0,1,2,3),FPlane(4,5,6,7),FPlane(8,9,10,11),FPlane(12,13,14,15)); FString str = rotationMatrix.ToString();
1.15 double To FString
//直接转换:精确到小数点后6位 return FString::SanitizeFloat(numeral.dou); //double→string→FString精确到小数点后6位 std::string Str = std::to_string(numeral.dou); FString string = UTF8_TO_TCHAR(Str.c_str()); //输出有效位数15位 #include <iostream> #include <string> #include <sstream> #include <iomanip> string str; double d = numeral.dou; stringstream ss; ss << setprecision(15) << d; str = ss.str(); FString string = UTF8_TO_TCHAR(str.c_str()); //指定小数点后几位 --注:double的有效位数只有16位,小数点算一位 double doub = 9999.1234567891011121314; FString TimeDesc = FString::Printf(TEXT("%.15f"), doub); //9999.123456789100601
1.16 bytes To FString
FString fstr; for (int i(0); i < FaceArray.Num() * 4; ++i) { FString tmpStr; ByteToHex(f_arrbytes[i], tmpStr); fstr.Append(tmpStr); } UE_LOG(LogTemp, Log, TEXT("%S"), *fstr);
1.17 FArrayReaderPtr to FString
uint8 data[512]; FMemory::Memzero(data, 512); FMemory::Memcpy(data, ArrayReaderPtr->GetData(), ArrayReaderPtr->Num()); FString str = ((const char*)data);
1.18 Array[uint8] to FString
TArray<uint8> content; const std::string cstr(reinterpret_cast<const char*>(content.GetData()), content.Num()); FString frameAsFString = cstr.c_str(); UE_LOG(VRSLog, Warning, TEXT("%s"), *frameAsFString);
1.19 FString To MD5(FString)
FString str = TEXT("someStuff"); FString md5 = FMD5::HashAnsiString();
1.20 FString To Ascii/Unicode
FString str = TEXT("123苹果"); int32 ascii = (int32)Source[4]; //数字代表序号 int32 ascii2 = (int32)Source.GetCharArray()[4]; //或者第二种写法
1.21 FString From Ascii/Unicode
FString str; int32 ascii = 49; //1的ascii是49。 中文 中的编码是20013 str.AppendChar(Ascii); //如果ascii为20013,转换出来时中
-
FName
2.1 FName To FString
FName str = FName(TEXT("hello")); FString fstr = str.ToString();
2.2 FName To FText
FName str = FName(TEXT("hello")); FText = FText::FromName(str);
-
FText
3.1FText To FString
//不可靠,在一些语言中存在损耗 FString Name = MyText.ToString();
-
TChar*
4.1 TChar* <-> char*
TCHAR_TO_ANSI(*str) ANSI_TO_TCHAR(*str) TCHAR_TO_UTF8(*str) UTF8_TO_TCHAR(*str)
-
UE4 Json
5.1 JsonObject To FString
处理Json需要在.Build.cs中添加Json模块
PrivateDependencyModuleNames.AddRange( new string[] { "CoreUObject", "Engine", "Slate", "SlateCore", "Json", // ... add private dependencies that you statically link with here ... } );
//Jdata转换为JsonStr FString JsonStr; TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&JsonStr); FJsonSerializer::Serialize(Jdata.ToSharedRef(), Writer);
5.2 FString To JsonObject
//注意String中使用双引号 FString JsonStr = TEXT("{\"key\":\"value\",\"key2\":\"value2\"}"); TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject); TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(JsonStr); FJsonSerializer::Deserialize(Reader,JsonObject); //JsonObject就是Json