Taene's

[U C++] Class - FString 본문

Unreal5/Unreal C++

[U C++] Class - FString

taene_ 2024. 7. 4. 16:56

FString의 구조

TCHAR과 FString의 관계성

 

  • TCHAR 배열의 문자열을 FString에 넣으면, TArray라는 언리얼 엔진이 제공하는 동적배열 클래스 방식으로 HELLO라는 문자열이 보관이 된다.
  • 이 후 *연산자를 사용하면 FString 클래스에 담긴 TArray 동적 배열의 문자열의 첫번째 인자의 포인터를 반환해준다.
  • FString으로 TCHAR 데이터를 관리하되, TCHAR 형태의 데이터가 필요한 경우에는 포인터 연산자(*)를 써서 사용한다.
  • FCString 클래스는 C 라이브러리에서 제공하는 기본적인 스트링 관련 함수들을 포함하고 있는 래퍼 클래스(Wrapper Class)이다.
  • FString은 문자열을 보관하는 클래스지만, 내부적으로 FCString를 통해 스트링 관련 연산 함수들을 사용할 수 있다.

 

FString의 활용

  • 다른 타입에서 FString으로 변환하는 함수들
    • FString::Printf()
    • FString::SanitizeFloat()
    • FString::FromInt()
  • FString에서 다른 타입으로 변환하는 함수들 (포인터 연산을 하므로 안전하지 X)
    • FCString::Atoi()
    • FCString::Atof()
TCHAR LogCharArray[] = TEXT("Hello Unreal!");
UE_LOG(LogTemp, Log, LogCharArray);

FString LogCharString = LogCharArray;
UE_LOG(LogTemp, Log, TEXT("%s"), *LogCharString);

const TCHAR* LogCharPtr = *LogCharString;	//FString을 다시 TCHAR* 형태로 받음
TCHAR* LogCharDataPtr = LogCharString.GetCharArray().GetData();	//FString의 포인터를 받아서 직접 고치고 싶을 경우(const 없음)

TCHAR LogCharArrayWithSize[100];	//다시 배열로 가져오기 위한 문자열 복사
FCString::Strcpy(LogCharArrayWithSize, LogCharString.Len(), *LogCharString);	//마지막에 버퍼 지정

//문자열 비교 함수 Contains(), 문자열 찾는 함수 Find(), 문자열 자르는 함수 Mid()
if (LogCharString.Contains(TEXT("unreal"), ESearchCase::IgnoreCase))	//대소문자 구분없이 비교 (대소문자 구분해서 비교는 CaseSensitive)
{
	int32 Index = LogCharString.Find(TEXT("unreal"), ESearchCase::IgnoreCase);	//unreal이라는 단어가 몇번째 index에 있는지 찾기
	FString EndString = LogCharString.Mid(Index);	//Mid(): Returns the substring from Start position to the end
	UE_LOG(LogTemp, Log, TEXT("Find Test: %s"), *EndString);
}

//문자열 자르는 함수2 Split() - 지정 문자를 기준으로 잘라서 문자열 두개를 반환
FString Left, Right;
if (LogCharString.Split(TEXT(" "), &Left, &Right))
{
	UE_LOG(LogTemp, Log, TEXT("Split Test: %s 와 %s"), *Left, *Right);
}

//변환 함수들
int32 IntValue = 32;
float FloatValue = 3.141592;

FString FloatIntString = FString::Printf(TEXT("Int:%d, Float:%f"), IntValue, FloatValue);
FString FloatToString = FString::SanitizeFloat(FloatValue);
FString IntToString = FString::FromInt(IntValue);

UE_LOG(LogTemp, Log, TEXT("%s"), *FloatIntString);
UE_LOG(LogTemp, Log, TEXT("Int:%s, Float:%s"), *IntToString, *FloatToString);

//FloatToString -> int 변환
int32 FloatStringToInt = FCString::Atoi(*FloatToString);
UE_LOG(LogTemp, Log, TEXT("FloatToString -> int: %d"), FloatStringToInt);

'Unreal5 > Unreal C++' 카테고리의 다른 글

[U C++] Unreal Object & Reflection System  (0) 2024.07.05
[U C++] Class - FName  (0) 2024.07.04
[U C++] Unreal C++ type and size  (0) 2024.07.04
[U C++] UE Coding Style  (0) 2024.07.03
[U C++] UE_LOG()  (0) 2024.07.03