#pragma once #include #include #include #include #include namespace iflytop { namespace core { using namespace std; class StringUtils { char byteToChar(uint8_t byte); bool isLegalHex(char c); public: string upper(const string& value); string lower(const string& value); string bytesToString(const uint8_t* data, size_t size); string bytesToString(const char* data, size_t size) { return bytesToString((const uint8_t*)data, size); } string bytesToString(const vector& byteTable) { return bytesToString(byteTable.data(), byteTable.size()); } int32_t split(const string& str, const string& delim, vector& ret); /** * @brief 替换字符串中的字符,如果new_value="",则删除旧字符 * * @param str * @param old_value * @param new_value * @return string& */ string& replaceAllDistinct(string& str, const string& old_value, const string& new_value); /** * @brief 转换HEX字符串成Bytes数组例如 * * // string("12,0a,2a,ab") ===> char buf[] = {0x12,0x0a,0x2a,0xab} * vector tobytes; * hexStringToBytes("12,0a,2a,ab",",",tobytes); * * // string("120a2aab") ===> char buf[] = {0x12,0x0a,0x2a,0xab} * vector tobytes; * hexStringToBytes("120a2aab","",tobytes); * * @param in 输入字符串 * @param delims 分割符 * @param byteTable 输出的byte数组 * @return true 转换成功 * @return false 转换失败 */ bool hexStringToBytes(string in, string delims, vector& byteTable); /** * @brief * * @param value 0x55 * @param bitCount 8 * @param remoteZero true/false * @return string 01010101 * * Demo: * StringUtils::bytet2Binary(0x55,8,true) ===> 1010101 * StringUtils::bytet2Binary(0x55,8,false) ===> 01010101 * */ string bytet2Binary(uint32_t value, int bitCount, bool remoteZero = true); string bytet2BinaryHumanReadable(uint32_t value, int bitCount); string bytet2BinaryBigEnd(uint32_t value, int bitCount, bool remoteZero = true); string escapeSequence(const string& raw_str); }; } // namespace core } // namespace iflytop