mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
91 lines
1.6 KiB
C++
91 lines
1.6 KiB
C++
// Common/StringToInt.cpp
|
|
|
|
#include "StdAfx.h"
|
|
|
|
#include "StringToInt.h"
|
|
|
|
UInt64 ConvertStringToUInt64(const char *s, const char **end)
|
|
{
|
|
UInt64 result = 0;
|
|
for (;;)
|
|
{
|
|
char c = *s;
|
|
if (c < '0' || c > '9')
|
|
{
|
|
if (end != NULL)
|
|
*end = s;
|
|
return result;
|
|
}
|
|
result *= 10;
|
|
result += (c - '0');
|
|
s++;
|
|
}
|
|
}
|
|
|
|
UInt64 ConvertOctStringToUInt64(const char *s, const char **end)
|
|
{
|
|
UInt64 result = 0;
|
|
for (;;)
|
|
{
|
|
char c = *s;
|
|
if (c < '0' || c > '7')
|
|
{
|
|
if (end != NULL)
|
|
*end = s;
|
|
return result;
|
|
}
|
|
result <<= 3;
|
|
result += (c - '0');
|
|
s++;
|
|
}
|
|
}
|
|
|
|
UInt64 ConvertHexStringToUInt64(const char *s, const char **end)
|
|
{
|
|
UInt64 result = 0;
|
|
for (;;)
|
|
{
|
|
char c = *s;
|
|
UInt32 v;
|
|
if (c >= '0' && c <= '9') v = (c - '0');
|
|
else if (c >= 'A' && c <= 'F') v = 10 + (c - 'A');
|
|
else if (c >= 'a' && c <= 'f') v = 10 + (c - 'a');
|
|
else
|
|
{
|
|
if (end != NULL)
|
|
*end = s;
|
|
return result;
|
|
}
|
|
result <<= 4;
|
|
result |= v;
|
|
s++;
|
|
}
|
|
}
|
|
|
|
|
|
UInt64 ConvertStringToUInt64(const wchar_t *s, const wchar_t **end)
|
|
{
|
|
UInt64 result = 0;
|
|
for (;;)
|
|
{
|
|
wchar_t c = *s;
|
|
if (c < '0' || c > '9')
|
|
{
|
|
if (end != NULL)
|
|
*end = s;
|
|
return result;
|
|
}
|
|
result *= 10;
|
|
result += (c - '0');
|
|
s++;
|
|
}
|
|
}
|
|
|
|
|
|
Int64 ConvertStringToInt64(const char *s, const char **end)
|
|
{
|
|
if (*s == '-')
|
|
return -(Int64)ConvertStringToUInt64(s + 1, end);
|
|
return ConvertStringToUInt64(s, end);
|
|
}
|