UE4 字符串转换及相关处理

FString / FText / FName 互相转换

范例
FStringFNameTestName = FName(*TestString); //不可靠,因 FName 不区分大小写,转换存在损耗
FStringFTextTestText = FText::FromString(TestString);//仅在一些情况下有效
FTextFStringTestString = TestText.ToString(); //不可靠
FTextFName不存在。但可先转到 FString 再转到 FName。//不可靠,因 FName 不区分大小写,转换存在损耗
FNameFStringTestString = TestName.ToString();
FNameFTextTestText = FText::FromName(TestName); //仅在一些情况下有效

FString相关

如需了解可用 FString 函数的完整列表,请查看 UnrealString.h、CString.h 或 FString 上的 API文档

构造及构建 FString

//构造
FString TestString = FString(TEXT("This is my test FString."));
//串联构建:

//用重载运算符 +=
FString AddedString = FString(TEXT("A"));
FString StringResult += AddedString;

//用重载运算符 +
FString AddedString = FString(TEXT("A"));
FString StringResult = AddedString  + AddedString;
//Printf 构建
int TestInt= 123;
FString TestString= FString(TEXT("myString"));
FString NewString= FString::Printf(TEXT("%d %s"), Int1, *TestString); // '123 myString'

//注意:使用 %s 参数包含 FStrings 时,必须使用 * 运算符返回 %s 参数所需的 TCHAR*

将 其它变量 转化为 FString

//将 std::string 转 FString
std::string TestString = "Hello World"; 
FString NewString(TestString.c_str());
//将 FArrayReaderPtr 转 FString
uint8 Data[512];  
FMemory::Memzero(Data, 512);  
FMemory::Memcpy(Data, ArrayReaderPtr->GetData(), ArrayReaderPtr->Num());  
FString NewString = ((const char*)Data);  
//将 Array 转 FString
TArray<uint8> Content;  
const std::string Str(reinterpret_cast<const char*>(Content.GetData()), Content.Num());  
FString NewFString = Str.c_str();  
//将 float 转 FString
FString FloatString = FString::SanitizeFloat(FloatVariable);

//将 int转 FString
FString IntString = FString::FromInt(IntVariable); 

//将 bool 转 FString
FString BoolString = InBool ? TEXT("true") : TEXT("false");//either 'true' or 'false'

//将 FVector 转 FString
FString FVectorString = VectorVariable.ToString();//'X= Y= Z='

//将 FVector2D 转 FString
FString FVector2DString = Vector2DVariable.ToString();//'X= Y='

//将 FRotator 转 FString
FString FRotatorString = RotatorVariable.ToString(); //'P= Y= R='

//将 FLinear 转 FString
FString FLinearString = ColorLinearColorVariable.ToString();//'(R=,G=,B=,A=)'

//将 UObject  转 FString
FString UObjectNameString = (InObj != NULL) ? InObj->GetName() : FString(TEXT("None"));//UObject's FName
//测试代码
//#include "Engine/Engine.h" 
FString FloatString = FString::SanitizeFloat(10.f);
FString IntString = FString::FromInt(10);
FString BoolString = bool(true) ? TEXT("true") : TEXT("false");
FString FVectorString = FVector::ZeroVector.ToString();
FString FVector2DString = FVector2D::ZeroVector.ToString();
FString FRotatorString = FRotator::ZeroRotator.ToString();
FString FLinearString = FLinearColor::Black.ToString();
FString UObjectNameString = (this != nullptr) ? this->GetName() : FString(TEXT("None"));

GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::White, FloatString);
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::White, IntString);
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::White, BoolString);
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::White, FVectorString);
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::White, FVector2DString);
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::White, FRotatorString);
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::White, FLinearString);
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::White, UObjectNameString);

测试结果(倒序显示):
在这里插入图片描述

将 FString 转化为 其它变量

//将 FString 转 std::string
FString TestString= "Hello";
std::string StdString(TCHAR_TO_UTF8(*TestString));
//将 FString 转 TArray<uint8>
//第一种(简易写法)
FString TestString;
TArray<uint8> Content; 

Content.SetNum(TestString.Len());
memcpy(Content.GetData(), TCHAR_TO_ANSI(*TestString), TestString.Len());

//第二种(复杂写法)
FString TestString;
const TCHAR* StrPtr = *TestString;
FTCHARToUTF8 UTF8String(StrPtr);
int32 CTXSize = UTF8String.Length();
 
TArray<uint8> Content;
Content.SetNum(CTXSize);
memcpy(Content.GetData(), UTF8String.Get(), CTXSize);
//将 FString 转 char*
char* TestChar = TCHAR_TO_ANSI(*TestString);

//将 FString 转 const TCHAR*
const TCHAR* TestChar = *TestString;
//将 FString 转 int
int TestInt = FCString::Atoi(*TestString);

//将 FString 转 float 
float TestFloat  = FCString::Atof(*TestString);

//将 bool 转 float 
//字符串"1",“true”,“True”,“Yes”,GTrue,GYes 和 非零整数(包括负整数) 将转化为 true 
//字符串"0",“false”,“False”,“No”,GFalse,GNo 和 无法解析值 将转化为 false
bool TestBool = TestString.ToBool();
//通过编译的测试代码
FString IntString = FString(TEXT("10"));
int NewInt = FCString::Atoi(*IntString);

FString FloatString = FString(TEXT("10.000"));
float NewFloat  = FCString::Atof(*FloatString);

FString CharString = FString(TEXT("This Is Char"));
const TCHAR* char = *CharString;

FString BoolString = FString(TEXT("true"));
bool NewBool = BoolString.ToBool();

FString 对比

//用重载运算符 == 进行两个字符串的对比
if ( TestString == TEXT("Test") )	
{ 
	return; 
}
	
// 用bool FString::Equals(const FString& Other)方法
if ( TestString.Equals(TEXT("Test")) )
{ 
	return; 
}

FString 搜索

bool Contains(const FString& SubStr)//返回此字符串是否包含指定的子字符串。
bool Contains(const TCHAR* SubStr)//返回此字符串是否包含指定的子字符串。

int32 Find(const FString& SubStr)//在字符串中搜索子字符串,并将index返回。
int32 Find(const TCHAR* SubStr)//在字符串中搜索子字符串,并将index返回。

FString 切割、截取、大小写转换

//通过指定字符串切割字符串,依次输出到指定字符串数组中
FString TestString("1,,2,,3");
TArray<FString>StringArray;
TestString.ParseIntoArray(StringArray, TEXT(",,"), false);
//字符串截取
FString Left(int Count);//从左往右截取指定Count索引的字符串
FString Right(int Count);//从右往左截取指定Count索引的字符串
FString Mid(int Count1 ,int Count2);//截取指定Count1与Count2索引之间的字符串
//字符串大小写转换
FString ToUpper();	//转为大写
FString ToLower();	//转为小写

FString 在HUD显示

如需在 HUD 中显示 FString,使用 Canvas 调用 FCanvas::DrawText() 函数:

//必须在 HUD 类的 DrawHUD() 函数中调用 DrawText() 函数,或在以 DrawHUD() 开始的函数链中调用。
Canvas->DrawText(BigFont, TestHUDString, 110.0f,110.0f);

FString 打印调试信息

//打印到输出日志
//#include "Engine/Engine.h" 
//范例:
UE_LOG(LogClass, Log, TEXT("This is a testing statement.%s"), *TestString);
//打印到视口
//#include "Engine/Engine.h" 
/**
*	此函数将向屏幕消息列表添加调试消息。 它将显示为FrameCount帧。
*	@param	Key		防止相同信息多次添加的唯一键。使用 -1 作为键,使调试信息短时出现。
*	@param	TimeToDisplay	信息显示时长,按秒计。
*	@param	DisplayColor	文本显示的颜色。
*	@param	DebugMessage	显示的信息(FString)。
*/
void UEngine::AddOnScreenDebugMessage(
	uint64 Key, 
	float TimeToDisplay, 
	FColor DisplayColor, 
	const FString& DebugMessage, )

//范例1:
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TestString);

//范例2:
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, FString::Printf(TEXT("Values: x: %f, y: %f"), x, y));

//范例3:
FString TestFilePath;
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, FString::Printf(TEXT("%s"), *TestFilePath));

FText相关

FText API文档链接

构造FText

//使用以下任意一个语法创建空白 FText:

FText TestText = FText::GetEmpty();

FText TestText = FText();

FName相关

FName API文档链接

构造FName

FName TestName = FName(TEXT("ThisIsMyTestFName"));
  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
UE4中有多种数据类型转换的方法,以下是一些常见的类型转换示例: 1. FString转换为FName: 使用FName构造函数将FString转换为FName对象,例如: ``` FString MyString = TEXT("MyName"); FName MyName = FName(*MyString); ``` 2. FString转换为FText: 使用FText构造函数将FString转换为FText对象,例如: ``` FString MyString = TEXT("Hello World"); FText MyText = FText::FromString(MyString); ``` 3. FString转换为int32: 使用FCString::Atoi或FCString::Strtoi将FString转换为int32,例如: ``` FString MyString = TEXT("123"); int32 MyInt = FCString::Atoi(*MyString); ``` 4. FString转换为float: 使用FCString::Atof将FString转换为float,例如: ``` FString MyString = TEXT("3.14"); float MyFloat = FCString::Atof(*MyString); ``` 5. FString转换为std::string: 使用TCHAR_TO_UTF8宏将FString转换为std::string,例如: ``` FString MyString = TEXT("Hello"); std::string MyStdString(TCHAR_TO_UTF8(*MyString)); ``` 6. FString转换为char*: 使用TCHAR_TO_ANSI宏将FString转换为char*,例如: ``` FString MyString = TEXT("Hello"); char* MyChar = TCHAR_TO_ANSI(*MyString); ``` 7. FString转换为TCHAR*: 使用*运算符将FString转换为TCHAR*,例如: ``` FString MyString = TEXT("Hello"); TCHAR* MyTChar = *MyString; ``` 这些是UE4中常见的类型转换方法,根据具体的需求选择适合的转换方式即可。\[3\] #### 引用[.reference_title] - *1* *2* [UE4 C++:基本数据类型、字符串处理转换](https://blog.csdn.net/Jason6620/article/details/126503682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [UE 数据类型转换](https://blog.csdn.net/weixin_44070137/article/details/127616570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值