17 #include <glog/logging.h> 28 void StringAppendV(
std::
string*
dest, const
char* format, va_list ap) {
32 int size = vsnprintf(
nullptr, 0, format, ap_copy);
36 std::string buffer(size + 1,
'\0');
37 CHECK_EQ(size, vsnprintf(&buffer[0], buffer.size(), format, ap));
53 StringAppendV(&result, format, ap);
60 StringAppendV(&result, format, va);
65 std::vector<std::string> split;
66 std::string::size_type start = 0;
67 std::string::size_type end = 0;
68 while ((end = source.find(split_on, start)) != std::string::npos) {
69 split.push_back(source.substr(start, end - start));
72 split.push_back(source.substr(start));
78 std::transform(source.begin(), source.end(), ret.begin(), ::tolower);
84 size_t end = source.size();
85 while (start < source.size() && std::isspace(source[start]))
87 if (start == source.size())
90 while (end > 0 && std::isspace(source[end - 1]))
93 DCHECK_LT(start, end);
94 return source.substr(start, end - start);
97 std::string
ToHexString(
const uint8_t* data,
size_t data_size) {
98 const char kCharMap[] =
"0123456789ABCDEF";
99 std::string ret(data_size * 2,
'\0');
100 DCHECK_EQ(ret.size(), data_size * 2);
101 for (
size_t i = 0; i < data_size; i++) {
102 ret[i * 2] = kCharMap[data[i] >> 4];
103 ret[i * 2 + 1] = kCharMap[data[i] & 0xf];
std::string ToAsciiLower(const std::string &source)
std::string ToHexString(const uint8_t *data, size_t data_size)
std::string StringPrintf(const char *format,...)
std::string StringPrintfV(const char *format, va_list va)
std::string TrimAsciiWhitespace(const std::string &source)
std::vector< std::string > StringSplit(const std::string &source, char split_on)
#define PRINTF_FORMAT(format, dots)