一个有用的工具类(功能会慢慢添加)Util

来源:互联网 发布:淘宝直通车管用吗 编辑:程序博客网 时间:2024/06/06 08:24

头文件Util.h

#ifndef _UTIL_H_#define _UTIL_H_#include <string.h>#include <time.h>#include <stdio.h>#include <stdarg.h>#include <iostream>#include <fstream>#include <map>#include <deque>#include <vector>#include <set>#include <list>#include <string>#include <ctime>#include <fstream>#include <sstream>#include <exception>#include <stdlib.h>#include <errno.h>#include <assert.h>#if (defined(WIN32) || defined(WIN64))#include <direct.h>#include <process.h>#include <tchar.h>#include <WINSOCK2.H>#include <Mswsock.h>#include <windows.h>#ifdef _DEBUG#include <assert.h>#endif#include <io.h>#include <winsock.h>#include <wininet.h>#include <sql.h>#include <sqlext.h>#include <sqltypes.h>#pragma comment(lib,"WS2_32")#pragma comment(lib,"odbc32")#else#include<pthread.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <netdb.h>#include <sys/types.h>/* some systems still require this */#include <sys/stat.h>#include <sys/termios.h>/* for winsize */#ifndef TIOCGWINSZ#include <sys/ioctl.h>#endif#include <stdio.h>/* for convenience */#include <stdlib.h>/* for convenience */#include <stddef.h>/* for offsetof */#include <string.h>/* for convenience */#include <unistd.h>/* for convenience */#include <signal.h>/* for SIG_ERR */#endifusing namespace std;#ifndef SZ_LENGTH#define SZ_LENGTH 128#endif#ifndef SZ_S_LENGTH#define SZ_S_LENGTH 64#endif#ifndef SZ_L_LENGTH#define SZ_L_LENGTH 512#endif#ifndef SZ_8_LENGTH#define SZ_8_LENGTH 8#endif#ifndef SZ_16_LENGTH#define SZ_16_LENGTH 16#endif#ifndef SZ_32_LENGTH#define SZ_32_LENGTH 32#endif#ifndef SZ_1024_LENGTH#define SZ_1024_LENGTH 1024#endif#ifndef SZ_2048_LENGTH#define SZ_2048_LENGTH 2048#endif#ifndef SZ_4096_LENGTH#define SZ_4096_LENGTH 4096#endif// 定义类中属性的访问方法(可以减少编写重复的代码)#ifndef PROPERTY_INIT#define PROPERTY_INIT(xtype,xname,proper)\voidSet##xname(xtype val)\{\proper = val;\}\xtype Get##xname()\{\return proper;\}\#endif/*************************************************************************   工具类                                                                ************************************************************************/class Util{public:// 获取区间[a,b)内的一个随机数static intGetRandomNum(int a,int b);// 获取一个随机概率static floatGetProbability();// 把int转换成stringstatic stringConvertToStr(int value);// 把double转换成stringstatic stringConvertToStr(double value);// 从sockaddr_in中获取IP地址static stringGetIPString(sockaddr_in& addr);// 从sockaddr_in获取端口static u_shortGetPort(sockaddr_in& addr);// 根据spilit_char切割字符串,结果放在vector中返回static vector<string>Spilit(const char* str,int len,char spilit_char);// 日志记录器static voidLog(const char* format,...);static stringGetRandomString(int len);};//Util::Log("[%s] [%s] [Line:%d]\t",__TIME__,__FILE__,__LINE__);#ifndef LOG_DEBUG#define LOG_DEBUG \Util::Log#endif#endif //_UTIL_H_


源文件Util.cpp

#include "Util.h"#include <time.h>#include <limits>// 获取区间[a,b)内的随机数int Util::GetRandomNum(int a,int b){static int initFlag = 0;if (initFlag == 0){srand((unsigned)time(NULL)); initFlag = 1;}return rand()%(b-a)+a;}// 得到一个0~1的随机数float Util::GetProbability(){int n = GetRandomNum(1,101);return (n / 100.0);}// 把int转换成stringstring Util::ConvertToStr(int value){char strBuffer[16] = {0};sprintf(strBuffer,"%d",value);return strBuffer;}// 把double转换成stringstring Util::ConvertToStr(double value){char strBuffer[16] = {0};sprintf(strBuffer,"%lf",value);return strBuffer;}// 从sockaddr_in中获取IP地址string  Util::GetIPString(sockaddr_in& addr){return inet_ntoa(addr.sin_addr);}// 从sockaddr_in获取端口u_short  Util::GetPort(sockaddr_in& addr){return ntohs(addr.sin_port);}// 根据spilit_char切割字符串,结果放在vector中返回vector<string> Util::Spilit(const char* str,int len,char spilit_char){vector<string>stringList;const intnstrBufferLen = 32;intnstrBufferIndex = 0;charstrBuffer[nstrBufferLen] = {0};for (int i = 0; i < len; ++i){if (str[i] != spilit_char){strBuffer[nstrBufferIndex++] = str[i];}else{stringList.push_back(strBuffer);memset(strBuffer,0,nstrBufferLen);nstrBufferIndex = 0;}}stringList.push_back(strBuffer);return stringList;}// 日志记录器void  Util::Log(const char* format,...){// 简单的日志类class CreateLogFile{public:CreateLogFile(){// 创建一个可写文件m_pFile = 0;m_strFileName = "";time_t ntime;tm* ptimeinfo;time(&ntime);ptimeinfo = localtime(&ntime);char szBuffer[1024] = {0};sprintf(szBuffer,"%4d-%02d-%02d",1900+ptimeinfo->tm_year, 1+ptimeinfo->tm_mon,ptimeinfo->tm_mday);m_strFileName = szBuffer;int index = GetRandomNum(0,100);string strIndex = ConvertToStr(index);//m_strFileName += "_";//m_strFileName += strIndex;m_strFileName += ".log";m_pFile = fopen(m_strFileName.c_str(),"w+");}voidRecord(const string& str){// 将信息写入到文件中if (m_pFile == 0){return;}fwrite(str.c_str(),str.size(),1,m_pFile);fflush(m_pFile);}~CreateLogFile(){// 关闭文件if (m_pFile != 0){fflush(m_pFile);fclose(m_pFile);}}private:string m_strFileName;// 日志文件名字FILE* m_pFile;// 文件指针};static CreateLogFile logfile; // static保证只初始化一次time_t ntime;tm* ptimeinfo;time(&ntime);// 获取时间ptimeinfo = localtime(&ntime);// 转换为本地时间char szBuffer[SZ_1024_LENGTH] = {0};// 在记录信息前面打上时间标记sprintf(szBuffer,"%4d-%02d-%02d %02d:%02d:%02d",1900+ptimeinfo->tm_year, 1+ptimeinfo->tm_mon,ptimeinfo->tm_mday,ptimeinfo->tm_hour,ptimeinfo->tm_min,ptimeinfo->tm_sec);string temp = "";temp = "[";temp += szBuffer;va_list info;va_start(info,format);vsnprintf(szBuffer,SZ_1024_LENGTH,format,info);//printf("%s",szBuffer);#if (defined(WIN32) || defined(WIN64))strcat(szBuffer,"\r\n");#elsestrcat(szBuffer,"\n");#endif temp += "]   ";temp += szBuffer;logfile.Record(temp);}// 得到一个随机字符串stringUtil::GetRandomString(int len){if (len <= 0){return "";}string strRet = "";for (int i = 0; i < len; ++i){int x = GetRandomNum(0,128);if ((x >= '0' && x <= '9') || (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z')){strRet += (char)(x);}}return strRet;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两岁半宝宝不说话不连贯怎么办 宝宝三岁说话口齿不清怎么办 b超宝宝腿短怎么办 两岁宝宝学说话口吃怎么办 两岁宝宝说话少怎么办 三岁宝宝说话少怎么办 快4岁不会说话怎么办 宝宝2岁半不爱说话怎么办 两岁半宝宝注意力不集中怎么办 中国出生的外籍小孩怎么办签证 中国人入外籍后国内财产怎么办 中国人入外籍后国内资产怎么办 小孩去美国上小学怎么办 咳嗽震的胸口疼怎么办 高中孩子对手机着迷怎么办 小孩不肯读书沉迷游戏怎么办 小孩沉迷吃鸡游戏怎么办 高一数学成绩差怎么办 小孩子学数学用手指算怎么办 孩子d和b分不清怎么办 和家人走散后怎么办幼儿教案 小孩胃口不好不爱吃饭怎么办 幼儿园孩子学习记不住怎么办 幼儿园小孩数字记不住怎么办 大班教案走丢了怎么办 ppt加视频反了怎么办 拔罐之后背疼怎么办 拔完火罐后背疼怎么办 打印机红色的口堵了怎么办 打印机红色复印不出来怎么办 打印机加错颜色墨水怎么办 中班安全教案脚扭伤了怎么办 中班脚扭伤了怎么办教案 中班安全脚扭伤了怎么办 中班安全脚扭伤了怎么办反思 走丢了怎么办教案反思 汽车后轱辘不转怎么办 走丢了怎么办社会教案 小老鼠搬鸡蛋鸡蛋太大怎么办 小班走丢了怎么办教案 小班走丢了怎么办反思