7- UE4常用类型转换

7. UE4常用类型转换

1. FString<->FName

// FString to FName
FString str = TEXT("TestStr");
FName name = FName(*Str);

// FName to FString
FString TargetStr = name.ToString();

2. std::string <-> FString

// std::string to FString 
std::string stdStr = "TestStr";
FString MyStr(stdStr.c_str());

// FString to char*
char* c = TCHAR_TO_UTF8(*MyStr);

// FString to std::string
std::string TargetStr(TCHAR_TO_UTF8(*MyStr));

3. FString <-> Int32

// FString to Int32
FString Str = TEXT("123");
int32 i = FCString::Atoi(*Str); // 或者用: atoi(TCHAR_TO_UTF8(*Str));

// Int32 to FString
FString TStr = FString::FromInt(123);

4. FString <-> float

// FString to float
float f = FCString::Atof(*Str); // f = atof(TCHAR_TO_UTF8(*Str));

// float to FString
FString TStr2 = FString::SanitizeFloat(36.32f);

5. FString <-> bool

// FString to bool
bool bNewbool = Str.ToBool();

6. FString <-> FText

// FString to FText
FText MyText = FText::FromString(Str);

7. FText <-> FName

// FText to FName
FName name = FName(*MyText.ToString());

// FName to FText
FText text = FText::FromName(name);

8. FString <-> TArray<uint8>

FString str = "Hello UE4";
TArray<uint8> outputData;

TCHAR* CharData = str.GetCharArray().GetData();
int32 Len = FCString::Strlen(CharData);
for(int i = 0;i<Len;i++)
{
uint8* dst = (uint8*)TCHAR_TO_UTF8(CharData);
outputData.Add(*dst);
CharData++;
}

// 或者
FBase64::Decode(str, outputData);

// TArray<uint8> to FString
const std::string cstr(reinterpret_cast<const char*>(outputData.GetData()), outputData.Num());
FString myStr(cstr.c_str());

// 或者
FString DestStr = FBase64::Encode(outputData);

9. 特殊:枚举 <-> 字符串(反射)


enum ETempEnum
{
One,
Two,
Three
};

// 枚举 To 字符串
{
// 通过枚举类型的名称找到对应的COD
const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, TEXT("ETempEnum"), true);

//通过索引值获取对应的字符串名
if(UEnumPtr)
{
FString str = EnumPtr->GetNameStringByIndex(ETempEnum::Two);
}
}


// 字符串 To 枚举
{
// 通过枚举类型的名称找到对应的COD
const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, TEXT("ETempEnum"), true);

if(UEnumPtr)
{
ETempEnum OutEnum = (ETempEnum)EnumPtr->GetIndexByNameString(TEXT("Three"));
}
}