Unreal Engine 4 C++ FString操作的几种方式

Unreal Engine 4 C++ FString操作的几种方式

好记性不如烂笔头啊,还是记录一下!


1.Printf 格式化

这个和C、C++的printf用法一样,先来看一看声明

static FString Printf
(
    const TCHAR * Fmt,
    ...
)

官方有详细介绍,用法如下:

int32 i = 1;
FString Text1 = FString::Printf(TEXT("Text%d"), i);

代码运行后会Text1的值为:

"Text1"

2.Format TArray 格式化

此方法用的函数为FString::Format的TArray版本,声明如下:

static FString Format
(
    const TCHAR * InFormatString,
    const TArray < FStringFormatArg > & InOrderedArguments
)

说明下参数的作用:

  • InFormatString 是进行格式化的字符串
  • InOrderedArguments 是会对InFormatString中的{index},根据InOrderedArguments中的索引进行替换

有点难懂,直接看代码和效果会容易理解一些:

int32 i = 1;
TArray<FStringFormatArg> FormatArray;
FormatArray.Add(FStringFormatArg(i));
FString Text1 = FString::Format(TEXT("Text{0}"), FormatArray);

代码运行后会Text1的值为:

"Text1"


TArray版本还可以格式化更多的值,会用数组的第0个元素替换{0},用数组的第1个元素替换{1}。

TArray<FStringFormatArg> FormatArray;
FormatArray.Add(FStringFormatArg(1));
FormatArray.Add(FStringFormatArg(2));
FString Text1 = FString::Format(TEXT("Text{0}{1}{0}"), FormatArray);

代码运行后会Text1的值为:

"Text121"

3.Format TMap 格式化

此方法用的函数为FString::Format的TMap版本,声明如下:

static FString Format
(
    const TCHAR * InFormatString,
    const TMap < FString , FStringFormatArg > & InNamedArguments
)

说明下参数的作用:

  • InFormatString 是进行格式化的字符串
  • InNamedArguments 是会对InFormatString中的{key},根据InNamedArguments中的键值索引替换成InNamedArguments里面的值

有点难懂,直接看代码和效果会容易理解一些:

TMap<FString, FStringFormatArg> FormatMap;
FormatMap.Add(TEXT("key1"), FStringFormatArg(1));
FString Text1 = FString::Format(TEXT("Text{key1}"), FormatMap);

代码运行后会Text1的值为:

"Text1"


TMap版本也还可以格式化更多的值,会用Map的键值为key1的值替换{key1},用键值为key2的值替换{key2}。

TMap<FString, FStringFormatArg> FormatMap;
FormatMap.Add(TEXT("key1"), FStringFormatArg(1));
FormatMap.Add(TEXT("key2"), FStringFormatArg(2));
FString Text1 = FString::Format(TEXT("Text{key1}{key2}{key1}"), FormatMap);

代码运行后会Text1的值为:

"Text121"

4.字符串拼接

Unreal Engine 4 的FString重载了很多操作符,可以很方便的拼接FString:

FString Text1 = TEXT("Text") + FString::FormatAsNumber(1);

代码运行后会Text1的值为:

"Text1"
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FHardwareInfo类是UE4中用于获取系统硬件信息的类。其具体实现位于文件Engine\Source\Runtime\Core\Public\GenericPlatform\GenericPlatformMisc.h和Engine\Source\Runtime\Core\Private\GenericPlatform\GenericPlatformMisc.cpp中。 在GenericPlatformMisc.h文件中,FHardwareInfo类定义了以下成员变量: ```c++ struct FHardwareInfo { FString CPUVendor; FString CPUModel; FString CPUBrand; FString OSVersion; FString OSVersionEx; FString GPUBrand; FString GPUChipset; FString GPUVendor; FString GPUDeviceID; FString GPUDriverVersion; FString MachineMakeAndModel; FString MemorySize; FString MemoryType; FString DiskModel; FString DiskDescription; FString DiskTotalCapacity; FString DiskSpaceFree; FString DiskSpaceUsed; }; ``` 这些成员变量分别表示CPU厂商、CPU型号、CPU品牌、操作系统版本、操作系统详细版本、GPU品牌、GPU芯片组、GPU厂商、GPU设备ID、GPU驱动版本、机器制造商和型号、内存大小、内存类型、硬盘型号、硬盘描述、硬盘总容量、硬盘空闲空间和硬盘已用空间等系统硬件信息。 在GenericPlatformMisc.cpp文件中,FHardwareInfo类的实现是通过调用系统API获取硬件信息。例如,获取CPU信息的代码如下: ```c++ FString FHardwareInfo::GetCPUInfo() { FString CPUInfo; TCHAR CPUString[0x20]; __cpuid(0x80000000, (uint32_t*)&CPUString[0], (uint32_t*)&CPUString[4], (uint32_t*)&CPUString[8], (uint32_t*)&CPUString[12]); uint32_t nExIds = (uint32_t)CPUString[0]; memset(CPUString, 0, sizeof(CPUString)); for (uint32_t i = 0x80000000; i <= nExIds; ++i) { __cpuid(i, (uint32_t*)&CPUString[0], (uint32_t*)&CPUString[4], (uint32_t*)&CPUString[8], (uint32_t*)&CPUString[12]); if (i == 0x80000002) { CPUInfo += FString(CPUString); } else if (i == 0x80000003) { CPUInfo += FString(CPUString); } else if (i == 0x80000004) { CPUInfo += FString(CPUString); } } CPUVendor = TEXT("Unknown"); CPUModel = CPUInfo.TrimStartAndEnd(); CPUBrand = CPUInfo.TrimStartAndEnd(); return CPUInfo; } ``` 这段代码使用了__cpuid()函数来获取CPU信息,然后将获取到的信息存储到FHardwareInfo类的相应成员变量中。 FHardwareInfo类的其他成员函数实现也是通过调用系统API获取硬件信息,并将其存储到相应的成员变量中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值