Below are conversions for the following types:
- FString to FName
- std::string to FString
- FString and FCString Overview
- FString to Integer
- FString to Float
- Float/Integer to FString
- UE4 C++ Source Header References
- Optimization Issues Concerning FNames
All the header files I refer to in this tutorial are found in
your UE4 install directory / Engine / Source
you will probably want to do a search for them from this point :)
Say we have
FString TheString = "UE4_C++_IS_Awesome";
To convert this to an FName you do:
FName ConvertedFString = FName(*TheString);
#include //.... std::string TestString = "Happy"; FString HappyString(TestString.c_str());
#include //.... FString UE4Str = "Flowers"; std::string MyStdString(TCHAR_TO_UTF8(*UE4Str));
You will find this particularly useful in cases other than float and int32!
The * operator on FStrings returns their TCHAR* data which is what FCString functions use.
If you cant find the function you want in FStrings (UnrealString.h) then you should check out the FCString functions (CString.h)
I show how to convert from FString to FCString below:
Say we have
FString TheString = "123.021";
(note Atoi is unsafe; no way to indicate errors)
int32 MyShinyNewInt = FCString::Atoi(*TheString);
float MyShinyNewFloat = FCString::Atof(*TheString);
Note that Atoi and Atof are static functions, so you use the syntax FCString::TheFunction to call it :)
FString NewString = FString::FromInt(YourInt); FString VeryCleanString = FString::SanitizeFloat(YourFloat);
Static functions in the UnrealString.h :)
CString.h UnrealString.h NameTypes.h StringConv.h (TCHAR_TO_ANSI etc)
See CString.h for more details and other functions like
atoi64 (string to int64) Atod (string to double precision float)
For a great deal of helpful functions you will also want to look at
UnrealString.h for direct manipulation of FStrings!
FNames are inherently fast, but you could be forcing a hashmap lookup if you are accessing them in the wrong way. Look at the following code:
This code will take the character string "MyFNameActor_Tag" and then look it up in the FName hashmap.
Whereas this code doesn't need to do a string conversion:
static const FName NAME_MyFNameActor(TEXT("MyFNameActor_Tag")); if (ActorHasTag(NAME_MyFNameActor))
In our testing with UE4 4.14, the second method is nearly 100 times faster than using the string lookup. So please, always use the static const FName method over the TEXT() method.
For more info on FNames check out