1
0
Fork 0
x64dbg/src/dbg/stringutils.h

62 lines
2.4 KiB
C++

#ifndef _STRINGUTILS_H
#define _STRINGUTILS_H
#include <string>
#include <vector>
#include <sstream>
#include <iomanip>
#include "_global.h"
typedef std::string String;
typedef std::wstring WString;
typedef std::vector<String> StringList;
typedef std::vector<WString> WStringList;
class StringUtils
{
public:
static StringList Split(const String & s, char delim, std::vector<String> & elems);
static StringList Split(const String & s, char delim);
static String Escape(const String & s);
static bool Unescape(const String & s, String & result, bool quoted = true);
static String Trim(const String & s, String delim = StringUtils::WHITESPACE);
static String TrimLeft(const String & s, String delim = StringUtils::WHITESPACE);
static String TrimRight(const String & s, String delim = StringUtils::WHITESPACE);
static String PadLeft(const String & s, size_t minLength, char ch);
static String Utf16ToUtf8(const WString & wstr);
static String Utf16ToUtf8(const wchar_t* wstr);
static WString Utf8ToUtf16(const String & str);
static WString Utf8ToUtf16(const char* str);
static void ReplaceAll(String & s, const String & from, const String & to);
static void ReplaceAll(WString & s, const WString & from, const WString & to);
static String sprintf(const char* format, ...);
static WString sprintf(const wchar_t* format, ...);
static String ToLower(const String & s);
static bool StartsWith(const String & h, const String & n);
static bool FromHex(const String & text, std::vector<unsigned char> & data, bool reverse = false);
static String ToHex(unsigned long long value);
static String ToHex(unsigned char* buffer, size_t size, bool reverse = false);
static String ToCompressedHex(unsigned char* buffer, size_t size);
static bool FromCompressedHex(const String & text, std::vector<unsigned char> & data);
template<typename T>
static String ToFloatingString(void* buffer)
{
auto value = *(T*)buffer;
std::stringstream wFloatingStr;
wFloatingStr << std::setprecision(std::numeric_limits<T>::digits10) << value;
return wFloatingStr.str();
}
template<typename T>
static String ToIntegralString(void* buffer)
{
auto value = *(T*)buffer;
return ToHex(value);
}
private:
static const String WHITESPACE;
};
#endif //_STRINGUTILS_H