UE4 字符串转换及相关处理

「UE4」字符串转换及相关处理目录

  • FString / FText / FName 互相转换
  • FString相关
    • 构造及构建 FString
    • 将 其它变量 转化为 FString
    • 将 FString 转化为 其它变量
    • FString 对比
    • FString 搜索
    • FString 切割、截取、大小写转换
    • FString 在HUD显示
    • FString 打印调试信息
  • FText相关
    • 构造FText
  • FName相关
    • 构造FName

FString / FText / FName 互相转换

范例
FString FName TestName = FName(*TestString); //不可靠,因 FName 不区分大小写,转换存在损耗
FString FText TestText = FText::FromString(TestString);//仅在一些情况下有效
FText FString TestString = TestText.ToString(); //不可靠
FText FName 不存在。但可先转到 FString 再转到 FName。//不可靠,因 FName 不区分大小写,转换存在损耗
FName FString TestString = TestName.ToString();
FName FText TestText = 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);

测试结果(倒序显示):
UE4 字符串转换及相关处理_第1张图片

将 FString 转化为 其它变量

//将 FString 转 std::string
FString TestString= "Hello";
std::string StdString(TCHAR_TO_UTF8(*TestString));
//将 FString 转 TArray
//第一种(简易写法)
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"));

你可能感兴趣的:(虚幻ue4)