forked from OSchip/llvm-project
[ADT] Support converting to lowercase string in toHex
This is useful in certain use-cases such as D51833. Differential Revision: https://reviews.llvm.org/D51835 llvm-svn: 341852
This commit is contained in:
parent
59b57c39fb
commit
72dc29a848
|
@ -139,22 +139,23 @@ inline std::string utohexstr(uint64_t X, bool LowerCase = false) {
|
|||
|
||||
/// Convert buffer \p Input to its hexadecimal representation.
|
||||
/// The returned string is double the size of \p Input.
|
||||
inline std::string toHex(StringRef Input) {
|
||||
inline std::string toHex(StringRef Input, bool LowerCase = false) {
|
||||
static const char *const LUT = "0123456789ABCDEF";
|
||||
const uint8_t Offset = LowerCase ? 32 : 0;
|
||||
size_t Length = Input.size();
|
||||
|
||||
std::string Output;
|
||||
Output.reserve(2 * Length);
|
||||
for (size_t i = 0; i < Length; ++i) {
|
||||
const unsigned char c = Input[i];
|
||||
Output.push_back(LUT[c >> 4]);
|
||||
Output.push_back(LUT[c & 15]);
|
||||
Output.push_back(LUT[c >> 4] | Offset);
|
||||
Output.push_back(LUT[c & 15] | Offset);
|
||||
}
|
||||
return Output;
|
||||
}
|
||||
|
||||
inline std::string toHex(ArrayRef<uint8_t> Input) {
|
||||
return toHex(toStringRef(Input));
|
||||
inline std::string toHex(ArrayRef<uint8_t> Input, bool LowerCase = false) {
|
||||
return toHex(toStringRef(Input), LowerCase);
|
||||
}
|
||||
|
||||
inline uint8_t hexFromNibbles(char MSB, char LSB) {
|
||||
|
|
|
@ -70,6 +70,7 @@ TEST(StringExtrasTest, ToAndFromHex) {
|
|||
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<uint8_t> EvenBytes = {0xA5, 0xBD, 0x0D, 0x3E, 0xCD};
|
||||
std::string EvenStr = "A5BD0D3ECD";
|
||||
|
@ -77,6 +78,7 @@ TEST(StringExtrasTest, ToAndFromHex) {
|
|||
EvenBytes.size());
|
||||
EXPECT_EQ(EvenStr, toHex(EvenData));
|
||||
EXPECT_EQ(EvenData, fromHex(EvenStr));
|
||||
EXPECT_EQ(StringRef(EvenStr).lower(), toHex(EvenData, true));
|
||||
}
|
||||
|
||||
TEST(StringExtrasTest, to_float) {
|
||||
|
|
Loading…
Reference in New Issue