151 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
| #include "Tool.h"
 | |
| #include <string.h>
 | |
| #include <chrono>
 | |
| #include <ctime>
 | |
| using namespace std;
 | |
| 
 | |
| Tool::Tool(/* args */)
 | |
| {
 | |
| }
 | |
| 
 | |
| Tool::~Tool()
 | |
| {
 | |
| }
 | |
| 
 | |
| int Tool::ByteLittleToInt(unsigned char *Count)
 | |
| {
 | |
|     int int1 = Count[0] & 0xff;
 | |
|     int int2 = (Count[1] & 0xff) << 8;
 | |
|     int int3 = (Count[2] & 0xff) << 16;
 | |
|     int int4 = (Count[3] & 0xff) << 24;
 | |
| 
 | |
|     return int1 | int2 | int3 | int4;
 | |
| }
 | |
| 
 | |
| unsigned char *Tool::IntToByteLittle(int Count)
 | |
| {
 | |
|     unsigned char *b = new unsigned char[4];
 | |
|     b[0] = (Count & 0xff);
 | |
|     b[1] = (Count & 0xff00) >> 8;
 | |
|     b[2] = (Count & 0xff0000) >> 16;
 | |
|     b[3] = (Count & 0xff000000) >> 24;
 | |
| 
 | |
|     return b;
 | |
| }
 | |
| 
 | |
| unsigned char *Tool::StringToByte(std::string str)
 | |
| {
 | |
|     char *cstr = (char *)str.c_str();
 | |
|     int Count = strlen(cstr);
 | |
|     unsigned char *temp = IntToByteLittle(Count);
 | |
|     unsigned char *buffer = new unsigned char[Count + 4];
 | |
|     for (size_t i = 0; i < 4; i++)
 | |
|     {
 | |
|         buffer[i] = temp[i];
 | |
|     }
 | |
|     delete[] temp;
 | |
|     for (size_t z = 4; z < Count + 4; z++)
 | |
|     {
 | |
|         buffer[z] = cstr[z - 4];
 | |
|     }
 | |
|     return buffer;
 | |
| }
 | |
| 
 | |
| void Tool::Error(std::string O)
 | |
| {
 | |
| #ifdef Development_mode
 | |
|     std::cout << "\n----[ERROR]----\n";
 | |
|     std::cout << "\n----[By "
 | |
|               << "YosinLenheart"
 | |
|               << "]----\n";
 | |
|     std::cout << O << std::endl;
 | |
|     std::cout << "\n----------------\n";
 | |
| #endif
 | |
| }
 | |
| void Tool::Warring(std::string W)
 | |
| {
 | |
| #ifdef Development_mode
 | |
|     std::cout << "\n----[WARRING]----\n";
 | |
|     std::cout << "\n----[By "
 | |
|               << "YosinLenheart"
 | |
|               << "]----\n";
 | |
|     std::cout << W << std::endl;
 | |
|     std::cout << "\n----------------\n";
 | |
| #endif
 | |
| }
 | |
| void Tool::Logger(std::string L)
 | |
| {
 | |
| #ifdef Development_mode
 | |
|     std::cout << "\n----[LOGGER]----\n";
 | |
|     std::cout << "\n----[By "
 | |
|               << "YosinLenheart"
 | |
|               << "]----\n";
 | |
|     std::cout << L << std::endl;
 | |
|     std::cout << "\n----------------\n";
 | |
| #endif
 | |
| }
 | |
| 
 | |
| void Tool::Split(const std::string &src, std::vector<std::string> &dest, const std::string &separator)
 | |
| {
 | |
|     std::string str = src;
 | |
|     std::string substring;
 | |
|     std::string::size_type start = 0, index;
 | |
|     dest.clear();
 | |
|     index = str.find_first_of(separator, start);
 | |
|     do
 | |
|     {
 | |
|         if (index != std::string::npos)
 | |
|         {
 | |
|             substring = str.substr(start, index - start);
 | |
|             dest.push_back(substring);
 | |
|             start = index + separator.size();
 | |
|             index = str.find(separator, start);
 | |
|             if (start == std::string::npos)
 | |
|                 break;
 | |
|         }
 | |
|     } while (index != std::string::npos);
 | |
| 
 | |
|     // the last part
 | |
|     substring = str.substr(start);
 | |
|     dest.push_back(substring);
 | |
| }
 | |
| 
 | |
| long long Tool::get_cur_time()
 | |
| {
 | |
|     // 获取操作系统当前时间点(精确到微秒)
 | |
|     chrono::time_point<chrono::system_clock, chrono::microseconds> tpMicro = chrono::time_point_cast<chrono::microseconds>(chrono::system_clock::now());
 | |
|     // (微秒精度的)时间点 => (微秒精度的)时间戳
 | |
|     time_t totalMicroSeconds = tpMicro.time_since_epoch().count();
 | |
| 
 | |
|     long long currentTime = ((long long)totalMicroSeconds) / 1000;
 | |
| 
 | |
|     return currentTime;
 | |
| }
 | |
| 
 | |
| int Tool::UTF8ToGB2312(char *szSrc, size_t iSrcLen, char *szDst, size_t iDstLen)
 | |
| {
 | |
|     iconv_t cd = iconv_open("gb2312//IGNORE", "utf-8//IGNORE"); // take care of "//IGNORE", it will ignore those invalid code
 | |
|     if (0 == cd)
 | |
|         return -2;
 | |
|     memset(szDst, 0, iDstLen);
 | |
|     char **src = &szSrc;
 | |
|     char **dst = &szDst;
 | |
|     if (-1 == (int)iconv(cd, src, &iSrcLen, dst, &iDstLen))
 | |
|         return -1;
 | |
|     iconv_close(cd);
 | |
|     return 0;
 | |
| }
 | |
| int Tool::GB2312ToUTF8(char *szSrc, size_t iSrcLen, char *szDst, size_t iDstLen)
 | |
| {
 | |
|     iconv_t cd = iconv_open("utf-8//IGNORE", "gb2312//IGNORE");
 | |
|     if (0 == cd)
 | |
|         return -2;
 | |
|     memset(szDst, 0, iDstLen);
 | |
|     char **src = &szSrc;
 | |
|     char **dst = &szDst;
 | |
|     if (-1 == (int)iconv(cd, src, &iSrcLen, dst, &iDstLen))
 | |
|         return -1;
 | |
|     iconv_close(cd);
 | |
|     return 0;
 | |
| }
 |