UE 常见数据类型格式转换

本文转载自知乎《旺仔好喝》文章(侵删):UE4_最全FString字符串与各格式转换 输出 - 知乎

  • FSting

1.1 FString To FNames

//字符串
FString TheString = "Hello,world";
//将FString转换为FName
FName ConvertedFString = FName(*TheString);

1.2 FString To FText

FString TheString = "Hello,world";
FText ConvertedFSting=FText::FromSting(TheString);

1.3 FString To Array[uint8]

//方法1
FString JsonStr;  
TArray<uint8> content;  
 
content.SetNum(JsonStr.Len());  
memcpy(content.GetData(), TCHAR_TO_ANSI(*JsonStr), JsonStr.Len());
​
//方法2
FString StrData;  
const TCHAR* StrPtr = *StrData;  
FTCHARToUTF8 UTF8String(StrPtr);  
int32 CTXSize = UTF8String.Length();  
 
TArray<uint8> URLData;  
URLData.SetNum(CTXSize);  
memcpy(URLData.GetData(), UTF8String.Get(), CTXSize);

1.4 FString To char*

FString TheString = "Hello,world";
char* MyCharPtr = TCHAR_TO_UTF8(*MyFString);

1.5 FString To const char *

FString TheString ontent= "Hello,world";
const char *plainText= TCHAR_TO_ANSI(*TheString );

1.6 FString To TCHAR*

FString s="a";
TCHAR* t=*s;

1.7 FString To std::string

#include <string>
​
FString UE4Str = TEXT("Flowers");
std::string MyStdString = TCHAR_TO_UTF8(*UE4Str);

1.8 FString To JsonObject

处理Json需要在.Build.cs中添加Json模块

PrivateDependencyModuleNames.AddRange(
			new string[]
			{
				"CoreUObject",
				"Engine",
				"Slate",
				"SlateCore",
				"Json",
				// ... add private dependencies that you statically link with here ...	
			}
			);

//注意String中使用双引号
FString JsonStr = TEXT("{\"key\":\"value\",\"key2\":\"value2\"}");
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject);
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(JsonStr);
FJsonSerializer::Deserialize(Reader,JsonObject);
//JsonObject就是Json

1.9 FString To bool

FString TheString = "123.021";
bool MyBool = MyFString.ToBool();

1.10 FString To int32

FString TheString = "123.021";
//注意,Atoi和Atof是静态函数,所以使用语法FCString::TheFunction调用它:)
int32 MyShinyNewInt = FCString::Atoi(*TheString);

1.11 FString To int64

FString TheString = "12312345678789561234879";
//注意,Atoi64是静态函数,所以使用语法FCString::TheFunction调用它:)
int64 MyShinyNewInt = FCString::Atoi64(*TheString);

1.12 FString To float

FString TheString = "123.021";
//注意,Atoi和Atof是静态函数,所以使用语法FCString::TheFunction调用它:)
float MyShinyNewFloat = FCString::Atof(*TheString);

1.13 FString To double

//函数方式
bool UDoubleFunction::FStringToDouble(FString str,double &num)
{
    std::string numString = TCHAR_TO_UTF8(*str);
    double b = atof(numString.c_str());
    if (b == NULL)
    {
        return false;
    }
    num =b;
    return true;
}
​
//直接转换
FString TheString = "123.021";
//注意,Atod是静态函数,所以使用语法FCString::TheFunction调用它:)
double MyShinyNewFloat = FCString::Atod(*TheString);
​
//FString转String转Double
FString str = "113.5246854";
std::string numString = TCHAR_TO_UTF8(*str);
double b = atof(numString.c_str());

1.14 基本类型 To FString()

//int
FString NewString = FString::FromInt(MyInt);
//float //double    ----只能精确到小数点后6位
FString VeryCleanString = FString::SanitizeFloat(MyFloat);
//bool
FString MyFString = MyBool?TEXT("true") :TEXT("false");
//FVector
FString MyFString = MyVector.ToString();
//FVector2D
FString MyFString = MyVector2D.ToString();
//FRotator
FString MyFString = MyRotator.ToString();
//FLinearColor
FString MyFString = MyLinearColor.ToString();
//UObject
FString MyFString = (MyObj != NULL) ? MyObj->GetName() : FString(TEXT("None"));
//FMatrix
FMatrix rotationMatrix(FPlane(0,1,2,3),FPlane(4,5,6,7),FPlane(8,9,10,11),FPlane(12,13,14,15));          
FString str = rotationMatrix.ToString();

1.15 double To FString

//直接转换:精确到小数点后6位
return   FString::SanitizeFloat(numeral.dou);


//double→string→FString精确到小数点后6位
std::string Str = std::to_string(numeral.dou);
FString string = UTF8_TO_TCHAR(Str.c_str());


//输出有效位数15位
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
string str;
double d = numeral.dou;
stringstream ss;
ss << setprecision(15) << d;
str = ss.str();
FString string = UTF8_TO_TCHAR(str.c_str());


//指定小数点后几位   --注:double的有效位数只有16位,小数点算一位
double doub = 9999.1234567891011121314;
FString TimeDesc = FString::Printf(TEXT("%.15f"), doub);	//9999.123456789100601

1.16 bytes To FString

FString fstr;
for (int i(0); i < FaceArray.Num() * 4; ++i)
{
    FString tmpStr;
    ByteToHex(f_arrbytes[i], tmpStr);
    fstr.Append(tmpStr);
}
UE_LOG(LogTemp, Log, TEXT("%S"), *fstr);

1.17 FArrayReaderPtr to FString

uint8 data[512];  
FMemory::Memzero(data, 512);  
FMemory::Memcpy(data, ArrayReaderPtr->GetData(), ArrayReaderPtr->Num());  
FString str = ((const char*)data);

1.18 Array[uint8] to 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); 

1.19 FString To MD5(FString)

FString str = TEXT("someStuff");
FString md5 = FMD5::HashAnsiString();

1.20 FString To Ascii/Unicode

FString str = TEXT("123苹果");
int32 ascii = (int32)Source[4];    //数字代表序号
int32 ascii2 = (int32)Source.GetCharArray()[4];      //或者第二种写法

1.21 FString From Ascii/Unicode

FString str;
int32 ascii = 49;       //1的ascii是49。   中文 中的编码是20013
str.AppendChar(Ascii);  //如果ascii为20013,转换出来时中
  • FName

2.1 FName To FString

FName str = FName(TEXT("hello"));
FString fstr = str.ToString();

2.2 FName To FText

FName str = FName(TEXT("hello"));
FText = FText::FromName(str);
  • FText

3.1FText To FString

//不可靠,在一些语言中存在损耗
FString Name = MyText.ToString(); 
  • TChar*

4.1 TChar* <-> char*

TCHAR_TO_ANSI(*str)
ANSI_TO_TCHAR(*str)  
TCHAR_TO_UTF8(*str)  
UTF8_TO_TCHAR(*str)
  • UE4 Json

5.1 JsonObject To FString

处理Json需要在.Build.cs中添加Json模块

PrivateDependencyModuleNames.AddRange(
			new string[]
			{
				"CoreUObject",
				"Engine",
				"Slate",
				"SlateCore",
				"Json",
				// ... add private dependencies that you statically link with here ...	
			}
			);

//Jdata转换为JsonStr
FString JsonStr;
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&JsonStr);
FJsonSerializer::Serialize(Jdata.ToSharedRef(), Writer);

5.2 FString To JsonObject

//注意String中使用双引号
FString JsonStr = TEXT("{\"key\":\"value\",\"key2\":\"value2\"}");
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject);
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(JsonStr);
FJsonSerializer::Deserialize(Reader,JsonObject);
//JsonObject就是Json
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值