1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/DaYa_White-grpc

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
fun.cpp 9.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Daya Отправлено 29.12.2018 07:53 e1d3925
#include "stdafx.h"
#include <time.h>
#include "fun.h"
#include <vector>
#include <sstream>
#include <assert.h>
#include <iostream>
using namespace std;
string& replace_all(string& str, const string& old_value, const string& new_value)
{
while (true) {
string::size_type pos(0);
if ((pos = str.find(old_value)) != string::npos)
str.replace(pos, old_value.length(), new_value);
else break;
}
return str;
}
string& replace_all_distinct(string& str, const string& old_value, const string& new_value)
{
for (string::size_type pos(0); pos != string::npos; pos += new_value.length()) {
if ((pos = str.find(old_value, pos)) != string::npos)
str.replace(pos, old_value.length(), new_value);
else break;
}
return str;
}
//int main()
//{
// cout << replace_all(string("12212"), "12", "21") << endl;
// cout << replace_all_distinct(string("12212"), "12", "21") << endl;
//}
#define DBG_PROGRAM 0
#define RANDOM(x) (rand()%x)
#define MAC_ADDR_LENGTH 12
#define FMT_MAC_ADDR_LEN (MAC_ADDR_LENGTH+5)
std::string formatMACAddr(void)
{
unsigned short i = 0;
unsigned short n = 0;
unsigned char fmtMACAddr[FMT_MAC_ADDR_LEN] = { '0','0','-','0','0','-','0','0','-',
'0','0','-','0','0','-','0','0' };
unsigned char HEXCHAR[16] = { '9','1','2','3','4','5','6','7','8','9','A','B','C',
'D','E','F' };
unsigned char genMACAddr[MAC_ADDR_LENGTH];
for (i = 0; i < MAC_ADDR_LENGTH; i++)
{
n = RANDOM(16);
#if DBG_PROGRAM
printf("Times: %d, Random Number: %d, HEX char: %c\r\n", i, n, HEXCHAR[n]);
#endif
genMACAddr[i] = HEXCHAR[n];
}
for (i = 0; i < MAC_ADDR_LENGTH; i++, n++)
{
if (fmtMACAddr[n] != '-')
{
fmtMACAddr[n] = genMACAddr[i];
}
else
{
n++;
fmtMACAddr[n] = genMACAddr[i];
}
}
string mac = string((char*)fmtMACAddr, FMT_MAC_ADDR_LEN);
return mac;
}
std::string newGUID()
{
std::string strguid;
static char buf[64] = { 0 };
GUID guid;
if (S_OK == ::CoCreateGuid(&guid))
{
_snprintf(buf, sizeof(buf)
, "%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X"
, guid.Data1
, guid.Data2
, guid.Data3
, guid.Data4[0], guid.Data4[1]
, guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5]
, guid.Data4[6], guid.Data4[7]
);
}
strguid = (const char*)buf;
return strguid;
}
std::string GetMidString(string src, string head, string last)
{
int cid = src.find(head.c_str());
if (cid > -1)
{
src = src.substr(cid + head.size(), src.size() - cid);
int strpp = src.find_first_of(last);
if (strpp > -1) {
string result = src.substr(0, strpp);
return result;
}
else {
return "";
}
}
return "";
}
int split(char dst[][80],char*str,const char*spl)
{
int n = 0;
char*result = NULL;
result = strtok(str, spl);
while (result != NULL)
{
strcpy(dst[n++], result);
result = strtok(NULL, spl);
}
return n;
}
std::string GenMac(std::string p)
{
if (p.size() > 14)
{
return p;
}
char s [][16] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
string sb;
sb.append(s[RANDOM(16)]);
sb.append(s[RANDOM(16)]);
sb.append(":");
sb.append(s[RANDOM(16)]);
sb.append(s[RANDOM(16)]);
sb.append(":");
sb.append(s[RANDOM(16)]);
sb.append(s[RANDOM(16)]);
return sb;
}
std::string GenIEMI(const char* srcIMEI)
{
char values[15];
int n;
for (n = 0; n < strlen(srcIMEI); n++)
{
values[n] = (byte)(atoi((char*)srcIMEI[n]) - 0x30);
}
for (; n < 14; n++)
{
values[n] = (byte)rand();
}
int sum = 0;
int dblValue;
for (n = 0; n < 14; n += 2)
{
sum += values[n];
dblValue = values[n + 1] * 2;
sum += dblValue / 10;
sum += dblValue % 10;
}
if (sum % 10 == 0)
{
values[14] = 0;
}
else
{
values[14] = (byte)(10 - (sum % 10));
}
for (n = 0; n < 15; n++)
{
values[n] += 0x30;
}
return string(values,15);
}
string Hex2bin(CStringA strHex)
{
string strRet;
DWORD dwCur = 0;
strHex.Remove(' ');
strHex.Replace(" ", "");
strHex.MakeLower();
strRet.resize(strHex.GetLength() / 2);
while (strHex.GetLength() >= 2)
{
CStringA strTemp = strHex.Left(2);
strHex = strHex.Mid(2);
DWORD dwHex = 0;
unsigned char c = strTemp[0];
if (c >= '0' && c <= '9')
{
dwHex += (c - '0') * 16;
}
else if (c >= 'a' && c <= 'f')
{
dwHex += (c - 'a' + 10) * 16;
}
else
{
continue;
}
c = strTemp[1];
if (c >= '0' && c <= '9')
{
dwHex += (c - '0');
}
else if (c >= 'a' && c <= 'f')
{
dwHex += (c - 'a' + 10);
}
else
{
continue;
}
strRet[dwCur++] = dwHex;
}
return strRet;
}
std::string Bin2Hex(string &strBin)
{
string str;
char szTemp[10] = { 0 };
for (int i=0;i<strBin.size();i++)
{
sprintf(szTemp,"%02x ",(unsigned char)strBin[i]);
str = str + szTemp;
}
return str;
}
std::string Bin2Hex_(string & strBin)
{
string str;
char szTemp[10] = { 0 };
for (int i = 0; i < strBin.size(); i++)
{
sprintf(szTemp, "%02x ", (unsigned char)strBin[i]);
str = str + szTemp;
}
return replace_all(str, " ", "");
}
//------------------------------------------------------------------------
std::string string_To_UTF8(const std::string & str)
{
int nwLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);
wchar_t * pwBuf = new wchar_t[nwLen + 1];//一定要加1,不然会出现尾巴
ZeroMemory(pwBuf, nwLen * 2 + 2);
::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), pwBuf, nwLen);
int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL);
char * pBuf = new char[nLen + 1];
ZeroMemory(pBuf, nLen + 1);
::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);
std::string retStr(pBuf);
delete[]pwBuf;
delete[]pBuf;
pwBuf = NULL;
pBuf = NULL;
return retStr;
}
//-----------------------------------------------------------------------
std::string UTF8_To_string(const std::string & str)
{
int nwLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0);
wchar_t * pwBuf = new wchar_t[nwLen + 1];//一定要加1,不然会出现尾巴
memset(pwBuf, 0, nwLen * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, str.c_str(), str.length(), pwBuf, nwLen);
int nLen = WideCharToMultiByte(CP_ACP, 0, pwBuf, -1, NULL, NULL, NULL, NULL);
char * pBuf = new char[nLen + 1];
memset(pBuf, 0, nLen + 1);
WideCharToMultiByte(CP_ACP, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);
std::string retStr = pBuf;
delete[]pBuf;
delete[]pwBuf;
pBuf = NULL;
pwBuf = NULL;
return retStr;
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// [8/19/2009 Leezhm]
// translate ascii characters to utf-8 characters
string VarintEncode(DWORD dw)
{
DWORD dwData = dw;
DWORD dwData2 = 0x80 * 0x80 * 0x80 * 0x80;
int nLen = 4;
byte hex[5] = { 0 };
DWORD dwOutLen = 0;
while (nLen > 0)
{
if (dwData > dwData2)
{
hex[nLen] = dwData / dwData2;
dwData = dwData % dwData2;
dwOutLen++;
}
dwData2 /= 0x80;
nLen--;
}
hex[0] = dwData;
dwOutLen++;
for (int i = 0; i < (int)(dwOutLen - 1); i++)
{
hex[i] += 0x80;
}
return string((const char *)hex, dwOutLen);
}
DWORD VarintDecode(string str, DWORD &dwOutLen)
{
DWORD dwLen = str.size();
if (!dwLen) return 0;
DWORD dwRet = 0;
DWORD dwTemp = 1;
int nLen = 0;
while (nLen < 5 && nLen<dwLen)
{
unsigned char c = (unsigned char)str[nLen];
if (!(c >> 7))
{
dwRet += c * dwTemp;
nLen++;
break;
}
else
{
dwRet += (c & 0x7f) * dwTemp;
dwTemp *= 0x80;
nLen++;
}
}
dwOutLen = nLen;
return dwRet;
}
void LOG(const char *szLog, ...)
{
va_list va;
va_start(va, szLog);
char buffer[65535] = {0};
vsprintf(buffer, szLog, va);
va_end(va);
time_t rawtime;
time(&rawtime);
char* szTime = ctime(&rawtime);
*(szTime + strlen(szTime) - 1) = 0;
char Buff[65535] = { 0 };
sprintf(Buff, "[%s] %s \r\n", szTime, buffer);
//象征性的Log:若需要log辅助debug,请使用xLog
printf(Buff);
}
std::string CurString(string src, string head, string last)
{
return src.substr(src.find(head) + head.size(), src.find(last, head.size()) - src.find(head) - head.size());
}
unsigned char ToHex(unsigned char x)
{
return x > 9 ? x + 55 : x + 48;
}
unsigned char FromHex(unsigned char x)
{
unsigned char y;
if (x >= 'A' && x <= 'Z') y = x - 'A' + 10;
else if (x >= 'a' && x <= 'z') y = x - 'a' + 10;
else if (x >= '0' && x <= '9') y = x - '0';
else assert(0);
return y;
}
std::string UrlEncode(const std::string& str)
{
std::string strTemp = "";
size_t length = str.length();
for (size_t i = 0; i < length; i++)
{
if (isalnum((unsigned char)str[i]) ||
(str[i] == '-') ||
(str[i] == '_') ||
(str[i] == '.') ||
(str[i] == '~'))
strTemp += str[i];
else if (str[i] == ' ')
strTemp += "+";
else
{
strTemp += '%';
strTemp += ToHex((unsigned char)str[i] >> 4);
strTemp += ToHex((unsigned char)str[i] % 16);
}
}
return strTemp;
}
std::string UrlDecode(const std::string& str)
{
std::string strTemp = "";
size_t length = str.length();
for (size_t i = 0; i < length; i++)
{
if (str[i] == '+') strTemp += ' ';
else if (str[i] == '%')
{
assert(i + 2 < length);
unsigned char high = FromHex((unsigned char)str[++i]);
unsigned char low = FromHex((unsigned char)str[++i]);
strTemp += high * 16 + low;
}
else strTemp += str[i];
}
return strTemp;
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/DaYa_White-grpc.git
git@api.gitlife.ru:oschina-mirror/DaYa_White-grpc.git
oschina-mirror
DaYa_White-grpc
DaYa_White-grpc
master