⚡이 문서는 이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해 강의를 바탕으로 작성되었습니다.
FString의 구조
- FString 에 포인터 연산자를 사용하면 내부의 TArray 동적배열의 첫 번째 인자의 포인터를 반환함
- C Library에서 제공하는 함수를 래핑하는 FCString 래퍼 클래스를 가지고 있음
- 문자열을 찾거나 자르는 등의 동작은 FCString을 통해서 동작함
- FCString을 다른 타입으로 변환하는 함수는 안전하지 않으니 사용에 유의 필요

FString 사용 예시
포인터 연산자를 사용하면 TArray의 포인터를 얻을 수 있다.
const 포인터임에 유의
const TCHAR* LogCharPtr = *LogCharString;
FString 내부의 TArray 포인터를 통해 직접 데이터를 조작하기를 원하는 경우 GetData() 함수를 사용한다.
TCHAR* LogCharDataPtr = LogCharString.GetCharArray().GetData();
String 데이터 복사를 위해서는 FCString의 함수를 호출하여 저수준의 동작을 수행한다.
TCHAR LogCharArrWithSize[100];
const TCHAR* LogCharPtr = *LogCharString;
FCString::Strcpy(LogCharArrWithSize, LogCharString.Len(), LogCharPtr);
특정 문자열의 시작 지점을 찾아 문자열을 자르고 로그로 출력하는 코드 예시
if (LogCharString.Contains(TEXT("Unreal"), ESearchCase::IgnoreCase))
{
int32 Index = LogCharString.Find(TEXT("Unreal"), ESearchCase::IgnoreCase);
FString EndString = LogCharString.Mid(Index);
UE_LOG(LogTemp, Log, TEXT("Find Test : %s"), *EndString);
}

- LogCharString.Contains(...) -> 특정 문자열이 포함되어 있는지 여부 판단
- ESearchCase::IgnoreCase -> 대소문자를 구분하지 않음
- LogCharString.Find(...) -> 특정 문자열의 시작 인덱스를 반환
- LogCharString.Mid(...) -> 특정 인덱스 이후의 문자열을 반환
문자열을 Split하는 방법 예시
FString Left, Right;
if (LogCharString.Split(TEXT(" "), &Left, &Right))
{
UE_LOG(LogTemp, Log, TEXT("Log Left : %s, Log Right : %s"), *Left, *Right);
}

기타 다른 데이터 타입을 FString으로 변경하는 방법 예시
가장 쉬운 방법은 FString::Printf(...) 함수를 사용하는 방법이다.
int32 IntValue = 32;
float FloatValue = 3.141592;
FString FloatIntString = FString::Printf(TEXT("Int:%d Float:%f"), IntValue, FloatValue);
단일 값을 String으로만 바꾸고 싶은 경우 SanitizeFloat, FromInt 함수를 사용한다.
FString FloatString = FString::SanitizeFloat(FloatValue);
FString IntString = FString::FromInt(IntValue);
FString 데이터를 int32, float으로 변경하는 방법 예시
FCString의 Atoi, Atof 함수를 사용한다.
int32 IntValueFromString = FCString::Atoi(*IntString);
float FloatValueFromString = FCString::Atof(*FloatString);'Unreal Engine 학습' 카테고리의 다른 글
| [UE5] Unreal Object 기초 (0) | 2023.09.17 |
|---|---|
| [UE5] 문자열 - FName, FText (0) | 2023.09.17 |
| [UE5] UE_LOG를 사용한 로그 출력 방법 (0) | 2023.09.17 |
| [UE5] 언리얼 C++ 기본 타입과 문자열 (0) | 2023.09.16 |
| [UE5] Game Instance Class 설정 (0) | 2023.09.16 |