Hi!
I hope you already solved your issue since it has been a while.
However, I post my code here in case it can help anyone else since I recently had the same issue.
Here is one way of how you can parse an integer from a string in a safe way! No undefined behaviors.
// header file
class StringToInt
{
public:
static int32 convert(const FString &string, int32 defaultValue = 0);
};
// source file
int32 StringToInt::convert(const FString &string, int32 defaultValue)
{
if (string.IsEmpty()
|| string[0] == L'-' && string.Len() == 1)
{
return defaultValue;
}
int32 value = 0;
int32 base = 1;
for (int32 i = string.Len() - 1; i >= 0; --i)
{
auto character = string*;
switch (character)
{
case L'0':
break;
case L'1':
value += base * 1;
break;
case L'2':
value += base * 2;
break;
case L'3':
value += base * 3;
break;
case L'4':
value += base * 4;
break;
case L'5':
value += base * 5;
break;
case L'6':
value += base * 6;
break;
case L'7':
value += base * 7;
break;
case L'8':
value += base * 8;
break;
case L'9':
value += base * 9;
break;
case L'-':
if (i == 0)
{
return -value;
}
else
{
return defaultValue;
}
break;
default:
return defaultValue;
break;
}
base *= 10;
}
return value;
}