summaryrefslogtreecommitdiffstats
path: root/source/core/slang-string-util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/slang-string-util.cpp')
-rw-r--r--source/core/slang-string-util.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/source/core/slang-string-util.cpp b/source/core/slang-string-util.cpp
index ac8a176ad..fb062de76 100644
--- a/source/core/slang-string-util.cpp
+++ b/source/core/slang-string-util.cpp
@@ -593,22 +593,29 @@ ComPtr<ISlangBlob> StringUtil::createStringBlob(const String& string)
cur++;
}
+ int radix = 10;
+ auto getDigit = CharUtil::getDecimalDigitValue;
+ if (cur+1 < end && *cur == '0' && (*(cur+1) == 'x' || *(cur+1) == 'X'))
+ {
+ radix = 16;
+ getDigit = CharUtil::getHexDigitValue;
+ cur += 2;
+ }
+
// We need at least one digit
if (cur >= end || !CharUtil::isDigit(*cur))
{
return SLANG_FAIL;
}
- Int value = *cur++ - '0';
- // Do the remaining digits
+ Int value = 0;
+ // Do the digits
for (; cur < end; ++cur)
{
- const char c = *cur;
- if (!CharUtil::isDigit(c))
- {
+ const auto d = getDigit(*cur);
+ if (d == -1)
return SLANG_FAIL;
- }
- value = value * 10 + (c - '0');
+ value = value * radix + d;
}
value = negate ? -value : value;