UE 数据类型转换

UE 数据类型转换

1. FString to FName 互转
//FString To FName
FString Str = TEXT("TestString");
FName Name = FName(*Str);
//FName To FString
FString TargetFString = Name.ToString();
2. FString to FText 互转
//FString to FText
FText MyText = FText::FromString(Str1);
//FText to FString 不可靠,在一些语言中存在损耗
FString MyString= MyText.ToString();  
3. FString to int32 互转
//FString to int32
int32 TestInt = FCString::Atoi(*MyFString);
//int32 to FString
FString TestString = FString::FromInt(TestInt);
4.FString to float 互转
//FString to float
float TestFloat = FCString::Atof(*MyFString);
//float to FString
FString TestString = FString::SanitizeFloat(TestFloat);
5. FString to std::string 互转
#include <string>

//FString to std::string
FString UE4Str = "Dog";
std::string MyStdString = TCHAR_TO_UTF8(*UE4Str);
//std::string to FString
FString HappyString(UTF8_TO_TCHAR(MyStdString.c_str()));
6. FString to char* 互转
//FString To char*
char* c = TCHAR_TO_UTF8(*MyStr);
//char* to FString
FString MyFString = FString(UTF8_TO_TCHAR(c));
7. FString to char* 互转 ANSI(中文不会乱码,主要用于使用windows api时,必须是ansi编码char*)


const char* UVideoUploadBPLibrary::FStringToConstChar(const FString& InFStr)
{
	// 获取FString 的宽字符表示
	const TCHAR* WideChar = *InFStr;

	// 计算所需缓冲区大小(包括 '\0')
	int32 length = WideCharToMultiByte(CP_ACP, 0, WideChar, -1, nullptr, 0, nullptr, nullptr);
	
	// 分配足够空间存储转换的ansi字符
	char* AnsiString = new char[length];

	WideCharToMultiByte(CP_ACP, 0, WideChar, -1, AnsiString, length, nullptr, nullptr);

	// 调用者记得释放 AnsiString, delete[] AnsiString;
	return AnsiString;
}



int main()
{
	FString _FilePath = TEXT("C://Users/yd/Downloads/temp/新建文件夹 (2)/1.txt");
	FPaths::NormalizeFilename(_FilePath);
	_FilePath = _FilePath.Replace(TEXT("/"), TEXT("\\"));
	const char* AnsiChar = FStringToConstChar(_FilePath);//FStringToAnsiChar
	
	FString _FilePath2 = ANSI_TO_TCHAR(AnsiChar);
	UE_LOG(LogTemp, Log, TEXT("%s, %d"), ANSI_TO_TCHAR(AnsiChar), (_FilePath == _FilePath2));// AnsiCharToFString: "C://Users/yd/Downloads/temp/新建文件夹 (2)/1.txt, 1"
	delete[] AnsiChar;
}
8.FString to TCHAR* 互转
//FString to const TCHAR*
FString Str1(TEXT("TestString"));
TCHAR* MyTChar = *Str1;
//const TCHAR* to FString
FString Mystr = MyTChar;
8.FString to TArray 互转
#include "HAL/UnrealMemory.h"
 
//FString to TArray<uint8>
FString str = "str";
TArray<uint8> MyArr;
MyArr.SetNum(str.Len());
FMemory::Memcpy(MyArr.GetData(), TCHAR_TO_ANSI(*str), str.Len());
//TArray<uint8> To FString
const std::string cstr1(reinterpret_cast<const char*>(MyArr.GetData()), MyArr.Num());
FString  MyStr(UTF8_TO_TCHAR(cstr1.c_str()));
UE_LOG(LogTemp, Warning, TEXT("%s"), *MyStr);
9. FString to enum 互转
enum ETestEnum
{
    East,
    South,
    West,
    North,
};
//enum to FString
const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, TEXT("ETestEnum"), true);
if (EnumPtr)
{
    FString str = EnumPtr->GetNameStringByIndex(ETestEnum::East);
}
//FString to enum  
const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, TEXT("ETestEnum"), true);
if (EnumPtr)
{
    ETestEnum OutEnum = (ETestEnum)EnumPtr->GetIndexByNameString(TEXT("North"));
}
10.TCHAR* to Char* 互转
//TCHAR* to char*
TCHAR* TCharString = TEXT("Hello, World!");
char* CharString = TCHAR_TO_ANSI(TCharString);
//char* to TCHAR*
TCHAR* TCharString1 = ANSI_TO_TCHAR(CharString);
11.TCHAR* to std::string
#include <string>
 
//TCHAR* to std::string
std::string str = TCHAR_TO_UTF8(TCharString);
//std::string to TCHAR*
TCHAR* TCStr = UTF8_TO_TCHAR(str);
12. TArray64 to TArray
//TArray64<uint8>
//第一种
TArray<uint8> ImgData = static_cast<TArray<uint8, FDefaultAllocator>>(TArray64<uint8>);
//第二种
TArray<uint8> ImgData(TArray64<uint8>);

13. ENUM

  • 获取Enum UMeta
    UMETA(BlueprintType)
    enum class ETest : uint8
    {
    	E_a = 0 UMETA(DisplayName = "aa"),
    	E_b = 1 UMETA(DisplayName = "bb"),
    }
    
    ETest et = ETest::E_a;
    FString etName = StaticEnum<ETest>()->GetDisplayNameTextByValue((int64)et).ToString();
    // etName = "aa";
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值