添加aes加密方法,base64加密算法
parent
493835ed0a
commit
8ab9824936
|
@ -0,0 +1 @@
|
|||
.idea/
|
|
@ -11,7 +11,25 @@
|
|||
</configurations>
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="0facce0d-c642-4d80-b2fb-daf5f3e68dff" name="Default Changelist" comment="" />
|
||||
<list default="true" id="0facce0d-c642-4d80-b2fb-daf5f3e68dff" name="Default Changelist" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/src/encrypt/aes.cpp" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/encrypt/aes.h" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/encrypt/base64.cpp" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/encrypt/base64.h" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/pattern/adapter.h" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/pattern/stratergy.h" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/CMakeLists.txt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/cmake-build-debug/Image/debug.h" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/cmake-build-debug/Image/loger.h" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/cmake-build-debug/Image/utils.h" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/cmake-build-debug/libGeneral.a" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/inc/utils.h" beforeDir="false" afterPath="$PROJECT_DIR$/inc/utils.h" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/obj/inc/utils.h" beforeDir="false" afterPath="$PROJECT_DIR$/obj/inc/utils.h" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pattern/Observer.cpp" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pattern/signleton.cpp" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/utils.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/src/utils.cpp" afterDir="false" />
|
||||
</list>
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
@ -22,10 +40,15 @@
|
|||
<option name="formatViaClangd" value="false" />
|
||||
</component>
|
||||
<component name="ExecutionTargetManager" SELECTED_TARGET="CMakeBuildProfile:Debug" />
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="OCFindUsagesOptions" text="true" ivars="false" properties="true" derivedClasses="false" />
|
||||
<component name="ProjectId" id="1UhntPy4Y6cJ81thpskTMk9Asng" />
|
||||
<component name="PropertiesComponent">
|
||||
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
||||
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
|
||||
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
|
||||
<property name="settings.editor.selected.configurable" value="CPPToolchains" />
|
||||
|
@ -64,10 +87,32 @@
|
|||
<workItem from="1576304090241" duration="2459000" />
|
||||
<workItem from="1576585606642" duration="7534000" />
|
||||
<workItem from="1576913674335" duration="7707000" />
|
||||
<workItem from="1576932562738" duration="10349000" />
|
||||
<workItem from="1576983828513" duration="3804000" />
|
||||
<workItem from="1577012242357" duration="1291000" />
|
||||
<workItem from="1577695713801" duration="735000" />
|
||||
<workItem from="1577715047417" duration="4424000" />
|
||||
<workItem from="1577775991319" duration="2037000" />
|
||||
<workItem from="1577933629796" duration="16000" />
|
||||
<workItem from="1577933660908" duration="635000" />
|
||||
<workItem from="1578153114620" duration="3459000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="1" />
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
<option name="TAB_STATES">
|
||||
<map>
|
||||
<entry key="MAIN">
|
||||
<value>
|
||||
<State>
|
||||
<option name="COLUMN_ORDER" />
|
||||
</State>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
|
@ -6,7 +6,7 @@ INCLUDE_DIRECTORIES (inc)
|
|||
aux_source_directory(src DIRSRCS)
|
||||
aux_source_directory(src/pattern PaternSrc)
|
||||
|
||||
add_library(General ${DIRSRCS} ${PaternSrc} src/pattern/signleton.h src/pattern/Observer.h)
|
||||
add_library(General ${DIRSRCS} ${PaternSrc} src/pattern/signleton.h src/pattern/Observer.h src/pattern/stratergy.h src/pattern/adapter.h src/encrypt/base64.cpp src/encrypt/base64.h src/encrypt/aes.cpp src/encrypt/aes.h)
|
||||
set(COPYITEM inc)
|
||||
file(GLOB INCLUDES ${PROJECT_SOURCE_DIR}/inc/*)
|
||||
file(COPY ${INCLUDES} DESTINATION ${LIBRARY_OUTPUT_PATH}/inc
|
||||
|
@ -16,3 +16,7 @@ message(status ${INCLUDES})
|
|||
file(GLOB PatternINCLUDES ${PROJECT_SOURCE_DIR}/src/pattern/*.h)
|
||||
file(COPY ${PatternINCLUDES} DESTINATION ${LIBRARY_OUTPUT_PATH}/inc
|
||||
FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE GROUP_READ WORLD_READ)
|
||||
|
||||
file(GLOB EncryptINCLUDES ${PROJECT_SOURCE_DIR}/src/encrypt/*.h)
|
||||
file(COPY ${EncryptINCLUDES} DESTINATION ${LIBRARY_OUTPUT_PATH}/inc
|
||||
FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE GROUP_READ WORLD_READ)
|
|
@ -1,16 +0,0 @@
|
|||
//
|
||||
// Created by admin on 2019/4/11.
|
||||
//
|
||||
|
||||
#ifndef __DEBUG__
|
||||
#define __DEBUG__
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
int dumpObj(void *dst,int rowNum,int num,bool ifAsii,char *out);
|
||||
int PrintDumpObjvoid (void *dst,int rowNum,int num,bool ifAsii);
|
||||
|
||||
#endif //SHARE_PRT_TEST_DEBUG_H
|
|
@ -1,43 +0,0 @@
|
|||
//
|
||||
// Created by bt110 on 2019/8/19.
|
||||
//
|
||||
|
||||
#ifndef CPP11FEATURETEST_LOGER_H
|
||||
#define CPP11FEATURETEST_LOGER_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
#include <time.h>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace Loger{
|
||||
typedef enum Mode{
|
||||
Mode_Daily, // 每天保存一次日志
|
||||
MODE_Monthly, // 每个月保存一次日志
|
||||
MODE_Weekly // 每周保存一次日志
|
||||
}ESaveMode;
|
||||
typedef class _C_Loger {
|
||||
private:
|
||||
string mCurrentPath;
|
||||
FILE *mFile; // 日志文件
|
||||
ESaveMode mMode; // 工作模式
|
||||
string mCurrentDate; // 当天
|
||||
int error;
|
||||
|
||||
public:
|
||||
_C_Loger(FILE *p);
|
||||
_C_Loger(string path);
|
||||
|
||||
int Debug();
|
||||
int Log();
|
||||
int LogFile();
|
||||
void operator+(const string&);
|
||||
void operator<<(const string&);
|
||||
}Loger;
|
||||
}
|
||||
|
||||
|
||||
#endif //CPP11FEATURETEST_LOGER_H
|
|
@ -1,15 +0,0 @@
|
|||
//
|
||||
// Created by 29019 on 2019/5/2.
|
||||
//
|
||||
|
||||
#ifndef CUTILS_UTILS_H
|
||||
#define CUTILS_UTILS_H
|
||||
|
||||
#include "utils.h"
|
||||
#include <string>
|
||||
#include "debug.h"
|
||||
using namespace std;
|
||||
|
||||
string itos(int x);
|
||||
|
||||
#endif //CUTILS_UTILS_H
|
Binary file not shown.
|
@ -8,8 +8,10 @@
|
|||
#include "utils.h"
|
||||
#include <string>
|
||||
#include "debug.h"
|
||||
using namespace std;
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
#define RELEASE_MEMORY(x) \
|
||||
if(nullptr == x) \
|
||||
|
@ -17,7 +19,6 @@ using namespace std;
|
|||
delete(x); \
|
||||
x = nullptr;\
|
||||
}
|
||||
|
||||
string itos(int x);
|
||||
|
||||
#endif //CUTILS_UTILS_H
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
//
|
||||
// Created by 29019 on 2019/12/30.
|
||||
//
|
||||
#ifndef GENERAL_ADAPTER_H
|
||||
#define GENERAL_ADAPTER_H
|
||||
|
||||
#endif //GENERAL_ADAPTER_H
|
|
@ -0,0 +1,67 @@
|
|||
//
|
||||
// Created by 29019 on 2020/1/4.
|
||||
//
|
||||
|
||||
#ifndef GENERAL_AES_H
|
||||
#define GENERAL_AES_H
|
||||
|
||||
#include <exception>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#define BLOCK_SIZE 16
|
||||
using namespace std;
|
||||
|
||||
class AES
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
ECB = 0, CBC = 1, CFB = 2
|
||||
};
|
||||
|
||||
private:
|
||||
enum
|
||||
{
|
||||
DEFAULT_BLOCK_SIZE = 16
|
||||
};
|
||||
enum
|
||||
{
|
||||
MAX_BLOCK_SIZE = 32, MAX_ROUNDS = 14, MAX_KC = 8, MAX_BC = 8
|
||||
};
|
||||
public:
|
||||
AES();
|
||||
virtual ~AES();
|
||||
private:
|
||||
//Key Initialization Flag
|
||||
bool m_bKeyInit;
|
||||
//Encryption (m_Ke) round key
|
||||
int m_Ke[MAX_ROUNDS + 1][MAX_BC];
|
||||
//Decryption (m_Kd) round key
|
||||
int m_Kd[MAX_ROUNDS + 1][MAX_BC];
|
||||
//Key Length
|
||||
int m_keylength;
|
||||
//Block Size
|
||||
int m_blockSize;
|
||||
//Number of Rounds
|
||||
int m_iROUNDS;
|
||||
//Chain Block
|
||||
char m_chain0[MAX_BLOCK_SIZE];
|
||||
char m_chain[MAX_BLOCK_SIZE];
|
||||
//Auxiliary private use buffers
|
||||
int tk[MAX_KC];
|
||||
int a[MAX_BC];
|
||||
int t[MAX_BC];
|
||||
private:
|
||||
void Xor(char* buff, char const* chain);
|
||||
void DefEncryptBlock(char const* in, char* result);
|
||||
void DefDecryptBlock(char const* in, char* result);
|
||||
void EncryptBlock(char const* in, char* result);
|
||||
void DecryptBlock(char const* in, char* result);
|
||||
public:
|
||||
void MakeKey(char const* key, char const* chain, int keylength =
|
||||
DEFAULT_BLOCK_SIZE, int blockSize = DEFAULT_BLOCK_SIZE);
|
||||
void Encrypt(char const* in, char* result, size_t n, int iMode = ECB);
|
||||
void Decrypt(char const* in, char* result, size_t n, int iMode = ECB);
|
||||
};
|
||||
|
||||
#endif //GENERAL_AES_H
|
|
@ -0,0 +1,11 @@
|
|||
//
|
||||
// Created by 29019 on 2020/1/4.
|
||||
//
|
||||
|
||||
#ifndef GENERAL_BASE64_H
|
||||
#define GENERAL_BASE64_H
|
||||
#include <string>
|
||||
std::string base64_encode(unsigned char const* , unsigned int len);
|
||||
std::string base64_decode(std::string const& s);
|
||||
|
||||
#endif //GENERAL_BASE64_H
|
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// Created by 29019 on 2019/12/30.
|
||||
//
|
||||
|
||||
#ifndef GENERAL_STRATERGY_H
|
||||
|
||||
#include <functional>
|
||||
|
||||
using namespace std;
|
||||
template <typename T> class Stratergy{
|
||||
public:
|
||||
virtual int Handler(T){
|
||||
return 0;
|
||||
}
|
||||
private:
|
||||
};
|
||||
#define GENERAL_STRATERGY_H
|
||||
|
||||
#endif //GENERAL_STRATERGY_H
|
|
@ -8,8 +8,10 @@
|
|||
#include "utils.h"
|
||||
#include <string>
|
||||
#include "debug.h"
|
||||
using namespace std;
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
#define RELEASE_MEMORY(x) \
|
||||
if(nullptr == x) \
|
||||
|
@ -17,7 +19,6 @@ using namespace std;
|
|||
delete(x); \
|
||||
x = nullptr;\
|
||||
}
|
||||
|
||||
string itos(int x);
|
||||
|
||||
#endif //CUTILS_UTILS_H
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,67 @@
|
|||
//
|
||||
// Created by 29019 on 2020/1/4.
|
||||
//
|
||||
|
||||
#ifndef GENERAL_AES_H
|
||||
#define GENERAL_AES_H
|
||||
|
||||
#include <exception>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#define BLOCK_SIZE 16
|
||||
using namespace std;
|
||||
|
||||
class AES
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
ECB = 0, CBC = 1, CFB = 2
|
||||
};
|
||||
|
||||
private:
|
||||
enum
|
||||
{
|
||||
DEFAULT_BLOCK_SIZE = 16
|
||||
};
|
||||
enum
|
||||
{
|
||||
MAX_BLOCK_SIZE = 32, MAX_ROUNDS = 14, MAX_KC = 8, MAX_BC = 8
|
||||
};
|
||||
public:
|
||||
AES();
|
||||
virtual ~AES();
|
||||
private:
|
||||
//Key Initialization Flag
|
||||
bool m_bKeyInit;
|
||||
//Encryption (m_Ke) round key
|
||||
int m_Ke[MAX_ROUNDS + 1][MAX_BC];
|
||||
//Decryption (m_Kd) round key
|
||||
int m_Kd[MAX_ROUNDS + 1][MAX_BC];
|
||||
//Key Length
|
||||
int m_keylength;
|
||||
//Block Size
|
||||
int m_blockSize;
|
||||
//Number of Rounds
|
||||
int m_iROUNDS;
|
||||
//Chain Block
|
||||
char m_chain0[MAX_BLOCK_SIZE];
|
||||
char m_chain[MAX_BLOCK_SIZE];
|
||||
//Auxiliary private use buffers
|
||||
int tk[MAX_KC];
|
||||
int a[MAX_BC];
|
||||
int t[MAX_BC];
|
||||
private:
|
||||
void Xor(char* buff, char const* chain);
|
||||
void DefEncryptBlock(char const* in, char* result);
|
||||
void DefDecryptBlock(char const* in, char* result);
|
||||
void EncryptBlock(char const* in, char* result);
|
||||
void DecryptBlock(char const* in, char* result);
|
||||
public:
|
||||
void MakeKey(char const* key, char const* chain, int keylength =
|
||||
DEFAULT_BLOCK_SIZE, int blockSize = DEFAULT_BLOCK_SIZE);
|
||||
void Encrypt(char const* in, char* result, size_t n, int iMode = ECB);
|
||||
void Decrypt(char const* in, char* result, size_t n, int iMode = ECB);
|
||||
};
|
||||
|
||||
#endif //GENERAL_AES_H
|
|
@ -0,0 +1,102 @@
|
|||
//
|
||||
// Created by 29019 on 2020/1/4.
|
||||
//
|
||||
|
||||
#include "base64.h"
|
||||
|
||||
#include "base64.h"
|
||||
#include <iostream>
|
||||
#include <ctype.h>
|
||||
static const std::string base64_chars =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
"abcdefghijklmnopqrstuvwxyz"
|
||||
"0123456789+/";
|
||||
|
||||
|
||||
static inline bool is_base64(unsigned char c) {
|
||||
return (isalnum(c) || (c == '+') || (c == '/'));
|
||||
}
|
||||
|
||||
std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
|
||||
std::string ret;
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
unsigned char char_array_3[3];
|
||||
unsigned char char_array_4[4];
|
||||
|
||||
while (in_len--) {
|
||||
char_array_3[i++] = *(bytes_to_encode++);
|
||||
if (i == 3) {
|
||||
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
|
||||
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
|
||||
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
|
||||
char_array_4[3] = char_array_3[2] & 0x3f;
|
||||
|
||||
for(i = 0; (i <4) ; i++)
|
||||
ret += base64_chars[char_array_4[i]];
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (i)
|
||||
{
|
||||
for(j = i; j < 3; j++)
|
||||
char_array_3[j] = '\0';
|
||||
|
||||
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
|
||||
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
|
||||
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
|
||||
char_array_4[3] = char_array_3[2] & 0x3f;
|
||||
|
||||
for (j = 0; (j < i + 1); j++)
|
||||
ret += base64_chars[char_array_4[j]];
|
||||
|
||||
while((i++ < 3))
|
||||
ret += '=';
|
||||
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
std::string base64_decode(std::string const& encoded_string) {
|
||||
int in_len = encoded_string.size();
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
int in_ = 0;
|
||||
unsigned char char_array_4[4], char_array_3[3];
|
||||
std::string ret;
|
||||
|
||||
while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
|
||||
char_array_4[i++] = encoded_string[in_]; in_++;
|
||||
if (i ==4) {
|
||||
for (i = 0; i <4; i++)
|
||||
char_array_4[i] = base64_chars.find(char_array_4[i]);
|
||||
|
||||
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
|
||||
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
|
||||
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
|
||||
|
||||
for (i = 0; (i < 3); i++)
|
||||
ret += char_array_3[i];
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (i) {
|
||||
for (j = i; j <4; j++)
|
||||
char_array_4[j] = 0;
|
||||
|
||||
for (j = 0; j <4; j++)
|
||||
char_array_4[j] = base64_chars.find(char_array_4[j]);
|
||||
|
||||
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
|
||||
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
|
||||
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
|
||||
|
||||
for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
//
|
||||
// Created by 29019 on 2020/1/4.
|
||||
//
|
||||
|
||||
#ifndef GENERAL_BASE64_H
|
||||
#define GENERAL_BASE64_H
|
||||
#include <string>
|
||||
std::string base64_encode(unsigned char const* , unsigned int len);
|
||||
std::string base64_decode(std::string const& s);
|
||||
|
||||
#endif //GENERAL_BASE64_H
|
|
@ -1,7 +0,0 @@
|
|||
//
|
||||
// Created by 29019 on 2019/12/21.
|
||||
//
|
||||
|
||||
#include "Observer.h"
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
//
|
||||
// Created by 29019 on 2019/12/30.
|
||||
//
|
||||
#ifndef GENERAL_ADAPTER_H
|
||||
#define GENERAL_ADAPTER_H
|
||||
|
||||
#endif //GENERAL_ADAPTER_H
|
|
@ -1,5 +0,0 @@
|
|||
//
|
||||
// Created by 29019 on 2019/12/17.
|
||||
//
|
||||
|
||||
#include "signleton.h"
|
|
@ -0,0 +1,19 @@
|
|||
//
|
||||
// Created by 29019 on 2019/12/30.
|
||||
//
|
||||
|
||||
#ifndef GENERAL_STRATERGY_H
|
||||
|
||||
#include <functional>
|
||||
|
||||
using namespace std;
|
||||
template <typename T> class Stratergy{
|
||||
public:
|
||||
virtual int Handler(T){
|
||||
return 0;
|
||||
}
|
||||
private:
|
||||
};
|
||||
#define GENERAL_STRATERGY_H
|
||||
|
||||
#endif //GENERAL_STRATERGY_H
|
|
@ -2,8 +2,9 @@
|
|||
// Created by 29019 on 2019/5/2.
|
||||
//
|
||||
#include "utils.h"
|
||||
|
||||
string itos(int x){
|
||||
char buf[100] = {0};
|
||||
itoa(x,buf,10);
|
||||
return string(buf);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue