[UE4] 常用类型数据转换FString

UE4_最全FString字符串与各格式转换输出-知乎icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/448713737

UE4 常用类型数据转换

1.FString参考

FString与其它类型互转官网文档参考icon-default.png?t=N7T8https://docs.unrealengine.com/4.26/zh-CN/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/FString/

//FString官方文档:https://docs.unrealengine.com/4.26/zh-CN/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/FString/
//构建 FString 
FString TestHUDString = FString(TEXT("This is my test FString."));
//输出 FString 
UE_LOG(LogTemp, Log, TEXT("%s"), *TestHUDString );

FString转换

从 FString->FName,FString->FName->FText

范例

FString

FName

TestHUDName = FName(*TestHUDString);

FString -> FName 不可靠。因为 FName 不区分大小写,所以转换存在损耗。

FString

FText

TestHUDText = FText::FromString(TestHUDString);

FString -> FText 在一些情况下有效,但需注意 — FString 内容不会从 FText 的"自动本地化"中受益。

 从FName->FString,FTex->FString

范例

FName

FString

TestHUDString = TestHUDName.ToString();

FText

FString

TestHUDString = TestHUDText.ToString();

FText -> FString 不可靠。它在一些语言的转换中存在潜在损耗。

数字和其他变量到 FString

变量类型

从字符串转换

字符串格式

float

FString::SanitizeFloat(FloatVariable);

int

FString::FromInt(IntVariable);

bool

InBool ?TEXT("true") :TEXT("false");

either 'true' or 'false'

FVector

VectorVariable.ToString();

'X= Y= Z='

FVector2D

Vector2DVariable.ToString();

'X= Y='

FRotator

RotatorVariable.ToString();

'P= Y= R='

FLinearColor

LinearColorVariable.ToString();

'(R=,G=,B=,A=)'

UObject

(InObj != NULL) ? InObj->GetName() : FString(TEXT("None"));

UObject's FName

对于其他数值转换,可使用带合适参数的 FString::Printf() 函数。

// FString::Printf 格式话字符串
//输出 FString 
UE_LOG(LogTemp, Log, TEXT("%s"),  FString::Printf(TEXT("-- TestFuncThreeParams,%d, %d,%f"), bVal ? 1:0, iVal, fVal) );

从 FString 到 int 和浮点型数字变量,以及到布尔型变量之间也存在转换。

变量类型

从字符串转换

注解

bool

TestHUDString.ToBool();

int

FCString::Atoi(*TestHUDString);

float

FCString::Atof(*TestHUDString);

代码参考如下

	{
		//FString to FName
		FString Str = TEXT("TestString");
		FName Name = FName(*Str);
		//FName To FString
		FString TargetFString = Name.ToString();
	}
	{
		//std::string to FString
		std::string stdStr = "TestString";
		FString MyStr(stdStr.c_str());
		//FString To char*
		char* c = TCHAR_TO_UTF8(*MyStr);
		//FString to std::string
		std::string TargetString(TCHAR_TO_UTF8(*MyStr));

        //FString <-> TCHAR* 自动隐式转换
        const FString MyFString;
        const TCHAR *TCharString = *MyFString;
        const FString MyFString=TCharString;
	}
	{
		//FString to Int32
		FString str = TEXT("TestString");
		int32 i_1 = FCString::Atoi(*str);
		//or
		int32 i_2 = atoi(TCHAR_TO_UTF8(*str));

		//FString to float
		int32 f_1 = FCString::Atof(*str);
		//or
		int32 f_2 = atof(TCHAR_TO_UTF8(*str));

		//FString to bool
		bool bNewBool = str.ToBool();

		//Int32 to FString
		FString TStr = FString::FromInt(123);
		//float to FString
		FString TStr_2 = FString::SanitizeFloat(123.3f);
		//bool to FString
		int32 b = true;
		FString Out= b ? TEXT("true"): TEXT("false");	
	}
	{
		//FString to TCHAR*
		FString Str1(TEXT("TestString"));
		const TCHAR* MyTChar = *Str1;
		//FString to FText
		FText MyText = FText::FromString(Str1);
		//FText to FName
		FName Name2 = FName(*MyText.ToString());
		//FName to FText
		FText MyText_1 = FText::FromName(Name2);
	}
	{
		//FString To TArray<uint8>
		FString Str = "Hello UE4"; // 原数据
		TArray<uint8> outDataArray; // 目标数据
		TCHAR* CharData = Str.GetCharArray().GetData();
		int32 Len = FCString::Strlen(CharData);
		for (int i = 0; i < Len; i++)
		{
			uint8* dst = (uint8*)TCHAR_TO_UTF8(CharData);
			outDataArray.Add(*dst);
			CharData++;
		}
		// or UE4方法
		FBase64::Decode(Str, outDataArray);

		//TArray<uint8> To FString
		const std::string cstr(reinterpret_cast<const char*>(outDataArray.GetData()), outDataArray.Num());
		FString MyStr1(cstr.c_str());
		// or UE4方法
		FString DestStr = FBase64::Encode(outDataArray);
	}
	{
		// 枚举
		enum ETempEnum { One, Two, Three };
		
		{
			// 枚举转换字符串
			// 通过枚举类型的名字找到对应枚举类型的元数据指针(或者叫COD:class Object Defalut)
			const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE,TEXT("ETempEnum"), true);
			if (EnumPtr)
			{
				FString str = EnumPtr->GetNameStringByIndex(ETempEnum::Two);
			}
		}
		
		{
			// 字符串转换为枚举
			const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE,TEXT("ETempEnum"), true);
			if (EnumPtr)
			{
				ETempEnum OutEnum = (ETempEnum)EnumPtr->GetIndexByNameString(TEXT("One"));
			}
		}
	}
	{
		//FString To Md5
		FString String("sdsafasfasf");
		FMD5::HashAnsiString(*String);

		// FString To Sha1
		FSHA1 Sha1Gen;
		Sha1Gen.Update((unsigned char*)TCHAR_TO_ANSI(*String), FCString::Strlen(*String));
		Sha1Gen.Final();

		FString Sha1String;
		for (int32 i = 0; i < 20; i++)
		{
			Sha1String += FString::Printf(TEXT("%02x"), Sha1Gen.m_digest[i]);
		}
	}

资料以及参考:

【UE4 C++ 基础知识】<3> 基本数据类型、字符串处理及转换 - 某校不良生 - 博客园

------------------------------------------------------------------------------------------------------------------------------

[UE4]FString

FString官方文档icon-default.png?t=N7T8https://docs.unrealengine.com/4.27/zh-CN/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/FString/

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值