Unreal Engine 字符串常用转换方法 总结

本文详细介绍了UE4中FString的使用,包括初始化、比较、拼接、分割等操作,以及与FName、FText、int32、float、TCHAR*、std::string之间的转换。同时,还涵盖了FString到TArray和从FArrayReaderPtr获取FString的方法。此外,还提到了数值与std::string之间的转换以及std::string与std::wstring的互转。

FString to FName/FText

    // FString -> FText
	FString MainString = "main";
	FText MainText = FText::FromString(MainString);

    // FText -> FString
    FString MainString = MainText.ToString();       // FText MainText
    // FName -> FString
    FString MainString = MainName.ToString();       // FName MainName

	// FString -> FName
	FString MainName = FName(*MainString);			// FString MainString

    // FName -> FText
    FString MainText = FText::FromName(MainName);   // Fname MainName

FString

初始化

FString str1("Hello!");

FString str2 = TEXT("Hello World!");

FString str3 = FString::Printf(TEXT("I am %d years old"), 18);

比较

if(MyFString.Equals(OtherFString, ESearchCase::CaseSensitive)){...} // 大小写敏感
if(MyFString.Equals(OtherFString, ESearchCase::IgnoreCase)){...}
if(MyFString == OtherFString){...}

拼接

FString str4 = TEXT("Hello World!");
str4 += FString("UE4");

float value = 1.0f;
FString str5 = FString::Printf(TEXT("Current Value: %f"),value);

分割

FString str6 = TEXT("Blueprint, C++, Material");
TArray<FString> strList;
str6.ParseIntoArray(strList, TEXT(","), true);

FString 与其他类型字符串转换

FString <-> int32/float
// FString -> int32/float
FString TheString = "233";
int32 MyShinyNewInt = FCString::Atoi(*TheString);

FString TheString = "233.3";
float MyStringtoFloat = FCString::Atof(*TheString);

// int32/float -> FString
FString NewString = FString::FromInt(233);
FString NewString = FString::SanitizeFloat(233.3f);
FString <-> TCHAR* 自动隐式转换
const FString MyFString;
const TCHAR *TCharString = *MyFString;

const FString MyFString=TCharString;
FString → char *
// 1
char *plainText= TCHAR_TO_ANSI(*str);

// 2
FString str
string t = TCHAR_TO_UTF8(*str);
char * returnvalue = (char *)malloc(sizeof(char) * (t.length() + 1));
strncpy_s(returnvalue, t.length() , t.c_str(), t.length()); 
FString <-> std::string
// FString -> std::string
FString UE4Str = "Flowers";
std::string MyStdString(TCHAR_TO_UTF8(*UE4Str));

// std::string -> FString
std::string TestString = "Happy"; 
FString HappyString(TestString.c_str());
FString <-> TArray
// FString -> TArray<uint8>
FString JsonStr;  
TArray<uint8> content;  
content.SetNum(JsonStr.Len());  
memcpy(content.GetData(), TCHAR_TO_ANSI(*JsonStr), JsonStr.Len()); 

//TArray<uint8> ****-> 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);   
FArrayReaderPtr -> FString
uint8 data[512];  
FMemory::Memzero(data, 512);  
FMemory::Memcpy(data, ArrayReaderPtr->GetData(), ArrayReaderPtr->Num());  
FString str = ((const char*)data);  
数值 -> std::to_string
std::string to_string( long value );
std::string to_string( long long value );
std::string to_string( unsigned value );
std::string to_string( unsigned long value );
std::string to_string( unsigned long long value );
std::string to_string( float value );
std::string to_string( double value );
std::string to_string( long double value );
std::string <-> std::wstring
WideCharToMultiByte

// std::wstring -> std::string
std::string WStringToString(const std::wstring wstr)
{
	std::string str;
	int len = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL,NULL);
	char*buffer = new char[len + 1];
	WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);
	buffer[len] = '\0';
	str.append(buffer);
	delete[]buffer;
	return str;
}

//  std::string -> std::wstring
std::string str_path=TCHAR_TO_UTF8(*AppPath);
std::wstring wstr_path;
wstr_path.assign(str_path.begin(), str_path.end());
  • 其他

  • 中文乱码

  • UE4 Source Header References

CString.h
UnrealString.h
NameTypes.h
StringConv.h (TCHAR_TO_ANSI etc)
  • CString.h可以查到更多,如
toi64 (string to int64)
Atod    (string to double precision float)
  • 更多关于FString的操作可以到UnrealString.h找到.

引用博客

【UE4 C++ 基础知识】<3> 基本数据类型、字符串处理及转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值