返回 导航

UE5

hangge.com

UE5 - UC++中的字符串类型详解(TCHAR、FString、UE_LOG)

作者:hangge | 2026-10-26 15:37
    在编程中,我们会使用字符类型来表示单个字母或者汉字,使用字符串类型来表示多个字母或者汉字的。下面我将同样例讲解 Unreal Engine C++ 中的字符和字符串类型。

一、字符类型和字符串类型

1,字符类型

(1)在原生 C++ 中,我们使用 char 来作为字符类型。
(2)而在 UE5 为了支持中文等非 ASNI 码所能表示的字符,字符的类型定义在了宏 TCHAR 中。TCHAR 的类型会根据平台而定,有可能是 wchar_t(Windows 平台),也有可能是 char16_t(移动平台)。 

2,字符串类型

(1)在原生 C++ 中,我们使用 char 指针或者 char 数组来保存一个字符串。 
char* str =  "HelloWorld";

(2)而在 UE5 中,由于 TCHAR 的具体类型有可能在不同平台上而不同,所以 UC++ 为我们封装好了一个宏 TEXT() 用来创建 TCHAR 数组。
TCHAR* Str = TEXT("Hello hangge.com");

二、字符串对象 FString 

1,基本介绍

(1)在原生 C++ 中,我们会使用 std 库的 string 类来构建一个 string 对象。string 对象提供了丰富的字符串操作方法,使用起来非常方便。 
(2)类似原生 C++ 里的 std:string,UE5 也封装了一个字符串类 FString,用来提供丰富的字符串相关的接口。 

2,FString 的构造

(1)最简单的构造方法是使用一个 TCHAR 数组来创建 FString,下面这段代码中看起来简单,但其实包含了两个步骤:
  • 第一步,用 TEXT() 宏创建了一个 TCHAR* 的右值。 
  • 第二步,FString 的构造函数中,有一个构造函数的参数就是 TCHAR*,所以这句话实际上是将一个 TCHAR 数组作为参数,隐式调用了 FString 的构造函数,得到一个 FString 的对象。 
FString Str = TEXT("Hello hangge.com"); 

(2)当然我们也可以显示调用这个构造函数,下面代码和上面是等效的。
FString Str(TEXT("Hello hangge.com")); 

(3)此外,我们还可以传入另一个 FString 作为参数,用来创建这个 FString 对象的拷贝。比如下面代码我们创建了字符串 A,并以 A 的内容为原型创建了 B。
FString A = TEXT("A"); 
FString B(A); 

(4)或者不带参数。这是默认的构造函数,能够得到一个空的 FString 对象,里面不包含任何字符串。
FString EmptyString; 

3,从 FString 中获得 TCHAR 数组

(1)对一个 FString 使用*号符可以获得它使用的 TCHAR 数组。
FString Str= TEXT("Hello"); 
TCHAR* TCharStr = *Str;

(2)在某些情景下,我们只能使用 TCHAR 数组作为参数,而不能使用 FString。举个例子,在 UC++ 中,我们可以使用静态函数 FString:Print() 来将式化字符串。 格式化字符串的方法和原生 C++ 中的 printf 方法类似。FString:Printf 函数的第一个参数是格式,其余的参数是这个格式所使用的参数。
    在第一个参数格式中,我们需要提供一个格式文本,通常使用 TEXT 宏来提供。在格式文本中,我们可以使用下面这些符号来表示参数的类型(包括但不限于):
  • %S 字符串类型,可以接收一个 TCHAR 指针作为参数。
  • %d 整型,可以接收一个 int32 的值作为参数。
  • %.xf 浮点数,其中的“x”表示保留小数后几位,比如“.2f”表示保留数点后两位。 接收一个 float 或者 double 类型的值作为参数。
String Str = FString::Printf(TEXT(格式),参数...);

(3)由于%s 参数接收的值类型是 TCHAR 指针,而不是 FString,所以我们需要使用 * 来将 FString 转换为 TCHAR 指针。如下面代码可以得到 NewStr 的值为“New Str: Hello hangge.com"。
FString Str = TEXT("Hello hangge.com");
FString NewStr = FString::Printf(TEXT("New Str: %s"), *Str);

三、使用 UE_LOG 宏进行字符串打印

(1)在之前的文章中(点击查看)我们使用了 UE_LOG 这个宏来打印一句话到游戏的 Output 窗口。

(2)在 UC++ 中,我们经常会用这个宏来输出信息。这个宏接受三个或以上的参数:
  • 第一个参数是 LogCategory(Log 的目录),可以理解为 Log 的类型,用来区分不同的类。为了方便,我们可以直接使用 UE5 提供的 LogTemp,也可以自定义一个新的 LogCategory。
  • 第二个参数是 LogLevel,表示 Log 的等级。目前引擎官方支持的有 Log、 Warning、Error 等几个等级,用来表示 Log 的紧急度。不同的 Log 等级会导致 Log 在窗口中会显示为不同的颜色。 
  • 第三个参数是 Log 格式文本。在 UC++ 编程中,为了能够适应不同平台的字符类型,这个参数需要用 TEXT() 宏将字符串包裹起来。Log 的格式文本和我们在前面介绍的 FString:Printf() 中的格式文本相同,可以使用不同的符号来要求提供参数。
  • 第四个参数是 Log 格式的参数。与 FString::Format() 一样,实际上 UE_LOG 可以接受无数个参数,UE_LOG 的第三个参数和接下来的参数会被传到类似于 sprintf 的函数中,对第三个参数的字符串进行格式化,最终拼装成一个新的字符串。例如下面会打印出“My name is hangge,and I'm 100 years old.”文本到控制台。 
UG_LOG(LogTemp, Log, TEXT("My name is %s,and I'm %d years old."), TEXT("hangge”), 100) 
评论

全部评论(0)

回到顶部