Index: llvm/include/llvm/ADT/StringExtras.h =================================================================== --- llvm/include/llvm/ADT/StringExtras.h +++ llvm/include/llvm/ADT/StringExtras.h @@ -139,8 +139,8 @@ /// Convert buffer \p Input to its hexadecimal representation. /// The returned string is double the size of \p Input. -inline std::string toHex(StringRef Input) { - static const char *const LUT = "0123456789ABCDEF"; +inline std::string toHex(StringRef Input, bool LowerCase = false) { + const char *const LUT = LowerCase ? "0123456789abcdef" : "0123456789ABCDEF"; size_t Length = Input.size(); std::string Output; @@ -153,8 +153,8 @@ return Output; } -inline std::string toHex(ArrayRef Input) { - return toHex(toStringRef(Input)); +inline std::string toHex(ArrayRef Input, bool LowerCase = false) { + return toHex(toStringRef(Input), LowerCase); } inline uint8_t hexFromNibbles(char MSB, char LSB) { Index: llvm/unittests/ADT/StringExtrasTest.cpp =================================================================== --- llvm/unittests/ADT/StringExtrasTest.cpp +++ llvm/unittests/ADT/StringExtrasTest.cpp @@ -70,6 +70,7 @@ OddBytes.size()); EXPECT_EQ(OddStr, toHex(OddData)); EXPECT_EQ(OddData, fromHex(StringRef(OddStr).drop_front())); + EXPECT_EQ(StringRef(OddStr).lower(), toHex(OddData, true)); std::vector EvenBytes = {0xA5, 0xBD, 0x0D, 0x3E, 0xCD}; std::string EvenStr = "A5BD0D3ECD"; @@ -77,6 +78,7 @@ EvenBytes.size()); EXPECT_EQ(EvenStr, toHex(EvenData)); EXPECT_EQ(EvenData, fromHex(EvenStr)); + EXPECT_EQ(StringRef(EvenStr).lower(), toHex(EvenData, true)); } TEST(StringExtrasTest, to_float) {