封装了常用函数,采用namespace方式,使用时可以using namespace Util,或者直接Util::xxxx() 1、ffcs_common.h #ifndef FFCS_COMMON_ACE_H_ #define FFCS_COMMON_ACE_H_ #include <string> #include <list> #include <vector> #include <ace/OS.h> #include <ace/FILE_IO.h> #define KB *1024 #define MB *1024 KB #define GB *1024 MB #define RT_OK 1 #define RT_NVL 0 #define RT_NG -1 #undef MAX #define MAX(a,b) ( ((a)>(b))?(a):(b) ) #undef MIN #define MIN(a,b) ( ((a)<(b))?(a):(b) ) #define GET_BYTE1(a) ( (a)%0x100 ) /*低1字节*/ #define GET_BYTE2(a) ( ((a)/0x100)%0x100 ) /*低2字节*/ #define GET_BYTE3(a) ( ((a)/0x10000)%0x100 ) /*低3字节*/ #define GET_BYTE4(a) ( ((a)/0x1000000)%0x100 ) /*低4字节*/ #define SET_BYTE1(a) ( (a) ) /*低1字节*/ #define SET_BYTE2(a) ( (a)*0x100 ) /*低2字节*/ #define SET_BYTE3(a) ( (a)*0x10000 ) /*低3字节*/ #define SET_BYTE4(a) ( (a)*0x1000000 ) /*低4字节*/ namespace Util { /*----------------------------------------------------------------------- * name: 打印版权 * input: * output: * return: *-----------------------------------------------------------------------*/ std::string fun_copyright(); /*----------------------------------------------------------------------- * name: 查找指定的字符串,区分大小写 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * output: * return: -1 -- 未找到 * >=0 -- 返回第一次出新的坐标 *-----------------------------------------------------------------------*/ int str_find(const char * ostr, const char * dstr); /*----------------------------------------------------------------------- * name: 查找字符串中第n次出现指定字符的位置 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * n -- 查询次数 * output: * return: -1 -- 未找到 * >=0 -- 返回第n次出现的坐标 *-----------------------------------------------------------------------*/ int str_nspn(const char * ostr, const char * dstr, size_t n); /*----------------------------------------------------------------------- * name: 不区分大小写, 查找指定的字符串 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * output: * return: -1 -- 未找到 * >=0 -- 返回第一次出新的坐标 *-----------------------------------------------------------------------*/ int strcasestr(const char * ostr, const char * dstr); /*----------------------------------------------------------------------- * name: 将长整形数转换成字符串 * input: num -- 待转换的长整型数 * output: char * -- 转换后的字符指针 * _size -- 字符字节数 * return: char * -- 转换后的字符指针 *-----------------------------------------------------------------------*/ char * ltostr(long num, char * _str, size_t _size); /*----------------------------------------------------------------------- * name: 将整形数转换成字符串 * input: _num -- 待转换的整型数 * _radix -- 进制 * output: * return: std::string -- 转换后的字符指针 *-----------------------------------------------------------------------*/ std::string itostr(int _num, int _radix); /*----------------------------------------------------------------------- * name: 去除字符串两边的空格 * input: _str -- 源字符串 * output: * return: char * -- 处理后的字符指针 *-----------------------------------------------------------------------*/ char * trim(char * _str); /*----------------------------------------------------------------------- * name: 字符替换 * input: _str -- 源字符串 * _size -- 源字符串大小 * _res -- 源字符 * _des -- 替换字符 * output: * return: char * -- 处理后的字符指针 *-----------------------------------------------------------------------*/ char * replace(char * _str, size_t _size, char _res, char _des); /*----------------------------------------------------------------------- * name: 不区分大小写,判断字符串是否已指定字符串开头 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int startwith_ncase(const char * ostr, const char * dstr); /*----------------------------------------------------------------------- * name: 区分大小写,判断字符串是否已指定字符串开头 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int startwith(const char * ostr, const char * dstr); /*----------------------------------------------------------------------- * name: 不区分大小写,判断字符串是否已指定字符串结尾 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int endwith_ncase(const char * ostr, const char * dstr); /*----------------------------------------------------------------------- * name: 区分大小写,判断字符串是否已指定字符串结尾 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int endwith(const char * ostr, const char * dstr); /*----------------------------------------------------------------------- * name: 将指定字符串转为大写 * input: ostr -- 源字符串 * dstr -- 转换后字符串 * output: * return: *-----------------------------------------------------------------------*/ void str_uppercase(const char * ostr, char * dstr); /*----------------------------------------------------------------------- * name: 将指定字符串转为小写 * input: ostr -- 源字符串 * dstr -- 转换后字符串 * output: * return: *-----------------------------------------------------------------------*/ void str_lowercase(const char * ostr, char * dstr); /*----------------------------------------------------------------------- * name: 判断字符串是否全部是阿拉伯数字 * input: ostr -- 被查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int str_isdigit(const char * ostr); /*----------------------------------------------------------------------- * name: 判断字符串是否全部是英文字母 * input: ostr -- 被查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int str_isalpha(const char * ostr); /*----------------------------------------------------------------------- * name: 判断字符串是否全部是ASCII字符 * input: ostr -- 被查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int str_isascii(const char * ostr); /*----------------------------------------------------------------------- * name: 判断字符串是否全部是英文或数字 * input: ostr -- 被查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int str_isalnum(const char * ostr); /*----------------------------------------------------------------------- * name: 统计字符串中指定字符的个数 * input: ostr -- 被查找字符串 * c -- 字符 * output: * return: =0 -- 无 * >0 -- 字符个数 *-----------------------------------------------------------------------*/ int str_count(const char * ostr, int c); /*----------------------------------------------------------------------- * name: 取当前时间,长度14,输出格式YYYYMMDDHHMMSS * input: _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void currenttime_1(char * _stime, int _size); /*----------------------------------------------------------------------- * name: 取当前日期,长度8,输出格式YYYYMMDD * input: _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void currenttime_2(char * _stime, int _size); /*----------------------------------------------------------------------- * name: 将YYYYMMDD转换成YYYY年MM月DD日 * input: _szDateTime -- 输入时间字符串,格式YYYYMMDD * _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void currenttime_3(const char * _szDateTime, char * _stime, int _size); /*----------------------------------------------------------------------- * name: 将YYYYMMDD转换成YYYY-MM-DD * input: _szDateTime -- 输入时间字符串,格式YYYYMMDD * _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void currenttime_4(const char * _szDateTime, char * _stime, int _size); /*----------------------------------------------------------------------- * name: 取当前日期,长度10,输出格式MMDDHHMMSS(月日时分秒) * input: _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void currenttime_5(char * _stime, int _size); /*----------------------------------------------------------------------- * name: 取当前日期,长度6,输出格式YYMMDD(年月日) * input: _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void currenttime_6(char * _stime, int _size); /*----------------------------------------------------------------------- * name: 取当前日期,长度8,输出格式MMDDHHMM(月日时分) * input: _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void currenttime_7(char * _stime, int _size); /*----------------------------------------------------------------------- * name: 去除字符串两边的空格 * input: _str -- 源字符串 * output: _str -- 输出字符串 * return: 去除两边空格后的字符串 *-----------------------------------------------------------------------*/ std::string std_string_trim(std::string &_str); /*----------------------------------------------------------------------- * name: 字符串替换 * input: _substr -- 子字符串 * _dststr -- 替换字符串 * output: _srcstr -- 源字符串 * return: void *-----------------------------------------------------------------------*/ void std_string_replace(std::string &_srcstr, const std::string &_substr, const std::string &_dststr); /*----------------------------------------------------------------------- * name: 字符串分割 * input: _str -- 源字符串 * _delimiter -- 分割符 * output: std::vector<std::string> -- 分割后列表 * return: void *-----------------------------------------------------------------------*/ std::vector<std::string> std_string_split(const std::string &_str, const char _delimiter); /*----------------------------------------------------------------------- * name: 字符串分割 * input: _str -- 源字符串 * _delimiter -- 分割串 * output: std::vector<std::string> -- 分割后列表 * return: void *-----------------------------------------------------------------------*/ std::vector<std::string> std_string_split(const std::string &_str, const std::string &_delimiter); /*----------------------------------------------------------------------- * name: 读取文件一行 * input: _file -- ACE_FILE_IO * output: _str_line -- 输出字符串 * return: =0 -- 数据为空,表示当前行为换行 * -1 -- 文件结束或读取失败 * =1 -- 成功,且当前行数据不为空 *-----------------------------------------------------------------------*/ int ace_read_line(ACE_FILE_IO &_file, std::string &_str_line); /*----------------------------------------------------------------------- * name: 写文件一行 * input: _file -- ACE_FILE_IO * _str_line -- 输入字符串 * output: * return: -1 -- 失败 * =1 -- 成功 *-----------------------------------------------------------------------*/ int ace_write_line(ACE_FILE_IO &_file, const std::string &_str_line); /*----------------------------------------------------------------------- * name: 以16进制打印报文 * input: str -- 报文信息 * len -- 报文长度 * output: * return: *-----------------------------------------------------------------------*/ /*void fun_list(char str[], int len);*/ }; #endif /*FFCS_COMMON_H_*/ 2、ffcs_common.cpp /*================================================================================================== * 项目名称: 通用库(ACE版本) * 功能: 提供通用函数 * 作者: huangjf * 联系: huangjf@ffcs.cn * 最近修改: 2010-8-31 * 版本: v2.0.12 ==================================================================================================*/ #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string> #include <list> #include <vector> #include <iostream> #include <sstream> #include <ace/OS.h> #include <ace/FILE_Addr.h> #include <ace/FILE_Connector.h> #include <ace/FILE_IO.h> #include <ace/OS_NS_ctype.h> #include <ace/OS_NS_string.h> #include <ace/Time_Value.h> #include "ffcs_common.h" /*----------------------------------------------------------------------- * name: 打印版权 * input: * output: * return: *-----------------------------------------------------------------------*/ std::string Util::fun_copyright() { std::string str; str.append("/n"); str.append("+=================================================================+/n"); str.append("+ ********** ********** ********** ********** +/n"); str.append("+ * * * * +/n"); str.append("+ * * * * +/n"); str.append("+ * * * * +/n"); str.append("+ ********** ********** * ********** +/n"); str.append("+ * * * * +/n"); str.append("+ * * * * +/n"); str.append("+ * * * * +/n"); str.append("+ * * ********** ********** +/n"); str.append("+ ( huangjf@ffcs.cn ) +/n"); str.append("+=================================================================+/n"); str.append("/n"); ACE_OS::printf(str.c_str()); return str; } /*----------------------------------------------------------------------- * name: 查找指定的字符串,区分大小写 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * output: * return: -1 -- 未找到 * >=0 -- 返回第一次出新的坐标 *-----------------------------------------------------------------------*/ int Util::str_find(const char * ostr, const char * dstr) { size_t i,j; size_t _size1 = ACE_OS::strlen(ostr); size_t _size2 = ACE_OS::strlen(dstr); if (_size1==0 || _size2==0 || _size1<_size2) { return -1; } for (i=0; i<=_size1-_size2; i++) { for (j=0; j<_size2; j++) { if ((ostr[i+j]&0xFF) != (dstr[j]&0xFF)) break; } if (j == _size2) return j; } return -1; } /*----------------------------------------------------------------------- * name: 查找字符串中第n次出现指定字符的位置 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * n -- 查询次数 * output: * return: -1 -- 未找到 * >=0 -- 返回第n次出现的坐标 *-----------------------------------------------------------------------*/ int Util::str_nspn(const char * ostr, const char * dstr, size_t n) { const char *p = ostr; size_t i = 0; size_t _size1 = ACE_OS::strlen(ostr); size_t _size2 = ACE_OS::strlen(dstr); if (_size1==0 || _size2==0 || n==0) { return -1; } for (i = 0; i < n; i++) { if ((p=ACE_OS::strpbrk(p, dstr)) == 0) return -1; p += 1; } return (p-ostr-1); } /*----------------------------------------------------------------------- * name: 不区分大小写, 查找指定的字符串 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * output: * return: -1 -- 未找到 * >=0 -- 返回第一次出新的坐标 *-----------------------------------------------------------------------*/ int Util::strcasestr(const char * ostr, const char * dstr) { size_t i = 0; size_t _size1 = ACE_OS::strlen(ostr); size_t _size2 = ACE_OS::strlen(dstr); if (_size1==0 || _size2==0 || _size1<_size2) { return -1; } for (i=0; i<=_size1-_size2; i++) { if (ACE_OS::ace_toupper(ostr[i])==ACE_OS::ace_toupper(dstr[0])) { if (ACE_OS::strncasecmp(&ostr[i], dstr, _size2)==0) { return i; } } } return -1; } /*----------------------------------------------------------------------- * name: 将长整形数转换成字符串 * input: num -- 待转换的长整型数 * output: char * -- 转换后的字符指针 * _size -- 字符字节数 * return: char * -- 转换后的字符指针 *-----------------------------------------------------------------------*/ char * Util::ltostr(long num, char * _str, size_t _size) { long m=0; unsigned int n=0, i=0; if (_size < 1) return NULL; ACE_OS::memset(_str, 0, _size); m = num; if (m==0) { _str[0] = '0'; _str[1] = '/0'; } else { i = _size; _str[--i] = '/0'; for (n=m%10, m/=10; (m>0 || (m==0 && n>0)) && i>0; n=m%10, m/=10) { _str[--i] = n + '0'; } n = 0; while (i!=0 && i<_size && n<_size) { _str[n++] = _str[i++]; } } return _str; } /*----------------------------------------------------------------------- * name: 将整形数转换成字符串 * input: _num -- 待转换的整型数 * _radix -- 进制 * output: * return: std::string -- 转换后的字符指针 *-----------------------------------------------------------------------*/ std::string Util::itostr(int _num, int _radix) { char cVal[128] = {0}; return std::string(ACE_OS::itoa(_num, cVal, _radix)); } /*----------------------------------------------------------------------- * name: 去除字符串两边的空格 * input: _str -- 源字符串 * output: * return: char * -- 处理后的字符指针 *-----------------------------------------------------------------------*/ char * Util::trim(char * _str) { int _size = 0; if (_str==NULL || ACE_OS::strlen(_str)==0) return _str; for (; *_str == 0x20 || *_str == 0x9; ++_str); /*剔除值前空格及Tab*/ for (_size=ACE_OS::strlen(_str); _str[_size-1] == 0x20 || _str[_size-1] == 0x9 || _str[_size-1] == '/r' || _str[_size-1] == '/n'; _str[_size-1]='/0', _size=ACE_OS::strlen(_str)); /*剔除值后空格 Tab 换行*/ return _str; } /*----------------------------------------------------------------------- * name: 字符替换 * input: _str -- 源字符串 * _size -- 源字符串大小 * _res -- 源字符 * _des -- 替换字符 * output: * return: char * -- 处理后的字符指针 *-----------------------------------------------------------------------*/ char * Util::replace(char * _str, size_t _size, char _res, char _des) { size_t i; for (i=0; i<_size; i++) { if ((_str[i]&0xFF) == (_res&0xFF)) { _str[i] = _des & 0xFF; } } return _str; } /*----------------------------------------------------------------------- * name: 不区分大小写,判断字符串是否已指定字符串开头 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int Util::startwith_ncase(const char * ostr, const char * dstr) { size_t _size1 = ACE_OS::strlen(ostr); size_t _size2 = ACE_OS::strlen(dstr); if (_size1==0 || _size2==0 || _size1<_size2) { return -1; } return (ACE_OS::strncasecmp(ostr, dstr, _size2) == 0)?1:-1; } /*----------------------------------------------------------------------- * name: 区分大小写,判断字符串是否已指定字符串开头 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int Util::startwith(const char * ostr, const char * dstr) { size_t _size1 = ACE_OS::strlen(ostr); size_t _size2 = ACE_OS::strlen(dstr); if (_size1==0 || _size2==0 || _size1<_size2) { return -1; } return (ACE_OS::strncmp(ostr, dstr, _size2) == 0)?1:-1; } /*----------------------------------------------------------------------- * name: 不区分大小写,判断字符串是否已指定字符串结尾 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int Util::endwith_ncase(const char * ostr, const char * dstr) { size_t _size1 = ACE_OS::strlen(ostr); size_t _size2 = ACE_OS::strlen(dstr); if (_size1==0 || _size2==0 || _size1<_size2) { return -1; } return (ACE_OS::strncasecmp(dstr, ostr+_size1-_size2, _size2) == 0)?1:-1; } /*----------------------------------------------------------------------- * name: 区分大小写,判断字符串是否已指定字符串结尾 * input: ostr -- 被查找字符串 * dstr -- 待查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int Util::endwith(const char * ostr, const char * dstr) { size_t _size1 = ACE_OS::strlen(ostr); size_t _size2 = ACE_OS::strlen(dstr); if (_size1==0 || _size2==0 || _size1<_size2) { return -1; } return (ACE_OS::strncmp(dstr, ostr+_size1-_size2, _size2) == 0)?1:-1; } /*----------------------------------------------------------------------- * name: 将指定字符串转为大写 * input: ostr -- 源字符串 * dstr -- 转换后字符串 * output: * return: *-----------------------------------------------------------------------*/ void Util::str_uppercase(const char * ostr, char * dstr) { size_t i=0; for (i=0; i<ACE_OS::strlen(ostr); i++) { if (ACE_OS::ace_isalpha(ostr[i])) { dstr[i] = ACE_OS::ace_toupper(ostr[i]); } } } /*----------------------------------------------------------------------- * name: 将指定字符串转为小写 * input: ostr -- 源字符串 * dstr -- 转换后字符串 * output: * return: *-----------------------------------------------------------------------*/ void Util::str_lowercase(const char * ostr, char * dstr) { size_t i=0; for (i=0; i<ACE_OS::strlen(ostr); i++) { if (ACE_OS::ace_isalpha(ostr[i])) { dstr[i] = ACE_OS::ace_tolower(ostr[i]); } } } /*----------------------------------------------------------------------- * name: 判断字符串是否全部是阿拉伯数字 * input: ostr -- 被查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int Util::str_isdigit(const char * ostr) { size_t i=0; size_t _size1 = ACE_OS::strlen(ostr); if (_size1==0) return -1; for (i=0; i<_size1; i++) { if (!ACE_OS::ace_isdigit(ostr[i])) return -1; } return 1; } /*----------------------------------------------------------------------- * name: 判断字符串是否全部是英文字母 * input: ostr -- 被查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int Util::str_isalpha(const char * ostr) { size_t i=0; size_t _size1 = ACE_OS::strlen(ostr); if (_size1==0) return -1; for (i=0; i<_size1; i++) { if (!ACE_OS::ace_isalpha(ostr[i])) return -1; } return 1; } /*----------------------------------------------------------------------- * name: 判断字符串是否全部是ASCII字符 * input: ostr -- 被查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int Util::str_isascii(const char * ostr) { size_t i=0; size_t _size1 = ACE_OS::strlen(ostr); if (_size1==0) return -1; for (i=0; i<_size1; i++) { if (!isascii(ostr[i])) return -1; } return 1; } /*----------------------------------------------------------------------- * name: 判断字符串是否全部是英文或数字 * input: ostr -- 被查找字符串 * output: * return: -1 -- 否 * =1 -- 是 *-----------------------------------------------------------------------*/ int Util::str_isalnum(const char * ostr) { size_t i=0; size_t _size1 = ACE_OS::strlen(ostr); if (_size1==0) return -1; for (i=0; i<_size1; i++) { if (!ACE_OS::ace_isalnum(ostr[i])) return -1; } return 1; } /*----------------------------------------------------------------------- * name: 统计字符串中指定字符的个数 * input: ostr -- 被查找字符串 * c -- 字符 * output: * return: =0 -- 无 * >0 -- 字符个数 *-----------------------------------------------------------------------*/ int Util::str_count(const char * ostr, int c) { size_t i=0, n=0; size_t _size1 = ACE_OS::strlen(ostr); if (_size1==0) return 0; for (i=0; i<_size1; i++) { if (ostr[i]==c) n++; } return n; } /*----------------------------------------------------------------------- * name: 取当前时间,长度14,输出格式YYYYMMDDHHMMSS * input: _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void Util::currenttime_1(char * _stime, int _size) { time_t timep; struct tm * p; if (_size < 14) return; ACE_Time_Value now(ACE_OS::gettimeofday()); timep = now.sec(); p = ACE_OS::localtime(&timep); ACE_OS::sprintf(_stime, "%4d%02d%02d%02d%02d%02d", (1900+p->tm_year), (1+p->tm_mon), p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); return; } /*----------------------------------------------------------------------- * name: 取当前日期,长度8,输出格式YYYYMMDD * input: _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void Util::currenttime_2(char * _stime, int _size) { time_t timep; struct tm * p; if (_size < 8) return; ACE_Time_Value now(ACE_OS::gettimeofday()); timep = now.sec(); p = ACE_OS::localtime(&timep); ACE_OS::sprintf(_stime, "%4d%02d%02d", (1900+p->tm_year), (1+p->tm_mon), p->tm_mday); return; } /*----------------------------------------------------------------------- * name: 将YYYYMMDD转换成YYYY年MM月DD日 * input: _szDateTime -- 输入时间字符串,格式YYYYMMDD * _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void Util::currenttime_3(const char * _szDateTime, char * _stime, int _size) { if (_size < 14) return; if (_szDateTime==NULL || ACE_OS::strlen(_szDateTime)<8) return; ACE_OS::strncpy(_stime, _szDateTime, 4); /*YYYY*/ ACE_OS::strcat(_stime, "年"); ACE_OS::strncat(_stime, &_szDateTime[4], 2); /*MM*/ ACE_OS::strcat(_stime, "月"); ACE_OS::strncat(_stime, &_szDateTime[6], 2); /*DD*/ ACE_OS::strcat(_stime, "日"); return; } /*----------------------------------------------------------------------- * name: 将YYYYMMDD转换成YYYY-MM-DD * input: _szDateTime -- 输入时间字符串,格式YYYYMMDD * _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void Util::currenttime_4(const char * _szDateTime, char * _stime, int _size) { if (_size < 14) return; if (_szDateTime==NULL || ACE_OS::strlen(_szDateTime)<8) return; ACE_OS::strncpy(_stime, _szDateTime, 4); /*YYYY*/ ACE_OS::strcat(_stime, "-"); ACE_OS::strncat(_stime, &_szDateTime[4], 2); /*MM*/ ACE_OS::strcat(_stime, "-"); ACE_OS::strncat(_stime, &_szDateTime[6], 2); /*DD*/ return; } /*----------------------------------------------------------------------- * name: 取当前日期,长度10,输出格式MMDDHHMMSS(月日时分秒) * input: _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void Util::currenttime_5(char * _stime, int _size) { time_t timep; struct tm * p; if (_size < 10) return; ACE_Time_Value now(ACE_OS::gettimeofday()); timep = now.sec(); p = ACE_OS::localtime(&timep); ACE_OS::sprintf(_stime, "%02d%02d%02d%02d%02d", (1+p->tm_mon), p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); return; } /*----------------------------------------------------------------------- * name: 取当前日期,长度6,输出格式YYMMDD(年月日) * input: _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void Util::currenttime_6(char * _stime, int _size) { time_t timep; struct tm * p; if (_size < 6) return; ACE_Time_Value now(ACE_OS::gettimeofday()); timep = now.sec(); p = ACE_OS::localtime(&timep); ACE_OS::sprintf(_stime, "%02d%02d%02d", (1900+p->tm_year)%100, (1+p->tm_mon), p->tm_mday); return; } /*----------------------------------------------------------------------- * name: 取当前日期,长度8,输出格式MMDDHHMM(月日时分) * input: _size -- 输出缓存大小 * output: _stime -- 时间字符串 * return: 输出字符串指针 *-----------------------------------------------------------------------*/ void Util::currenttime_7(char * _stime, int _size) { time_t timep; struct tm * p; if (_size < 8) return; ACE_Time_Value now(ACE_OS::gettimeofday()); timep = now.sec(); p = ACE_OS::localtime(&timep); ACE_OS::sprintf(_stime, "%02d%02d%02d%02d", (1+p->tm_mon), p->tm_mday, p->tm_hour, p->tm_min); return; } /*----------------------------------------------------------------------- * name: 去除字符串两边的空格 * input: _str -- 源字符串 * output: _str -- 输出字符串 * return: 去除两边空格后的字符串 *-----------------------------------------------------------------------*/ std::string Util::std_string_trim(std::string &_str) { std::string::iterator i; if (_str.empty()) return _str; /* trim left */ for (i = _str.begin(); i != _str.end(); i++) { if (!isspace(*i)) { _str.erase(_str.begin(), i); break; } } if (i == _str.end()) return _str; /* trim right */ for (i = _str.end() - 1; i != _str.begin(); i--) { if (!isspace(*i)) { _str.erase(i + 1, _str.end()); break; } } return _str; } /*----------------------------------------------------------------------- * name: 字符串替换 * input: _substr -- 子字符串 * _dststr -- 替换字符串 * output: _srcstr -- 源字符串 * return: void *-----------------------------------------------------------------------*/ void Util::std_string_replace(std::string &_srcstr, const std::string &_substr, const std::string &_dststr) { std::string::size_type pos_0 = 0; std::string::size_type len_1 = _substr.size(); std::string::size_type len_2 = _dststr.size(); while((pos_0=_srcstr.find(_substr, pos_0)) != std::string::npos) { _srcstr.replace(pos_0, len_1, _dststr); pos_0 += len_2; } } /*----------------------------------------------------------------------- * name: 字符串分割 * input: _str -- 源字符串 * _delimiter -- 分割符 * output: std::vector<std::string> -- 分割后列表 * return: void *-----------------------------------------------------------------------*/ std::vector<std::string> Util::std_string_split(const std::string &_str, const char _delimiter) { std::vector<std::string> _vector; std::istringstream iss(_str); while(!iss.eof()) { std::string s; std::getline(iss, s, _delimiter); _vector.push_back(s); } return _vector; } /*----------------------------------------------------------------------- * name: 字符串分割 * input: _str -- 源字符串 * _delimiter -- 分割串 * output: std::vector<std::string> -- 分割后列表 * return: void *-----------------------------------------------------------------------*/ std::vector<std::string> Util::std_string_split(const std::string &_str, const std::string &_delimiter) { std::vector<std::string> _vector; std::string::size_type fpos = 0, bpos = 0; if (!_str.size()) return _vector; do { std::string s; bpos = _str.find(_delimiter, fpos); if (bpos == std::string::npos) { s = _str.substr (fpos, _str.length()-fpos); } else { s = _str.substr (fpos, bpos-fpos); } _vector.push_back(s); fpos = bpos + _delimiter.size(); } while (bpos != std::string::npos); return _vector; } /*----------------------------------------------------------------------- * name: 读取文件一行 * input: _file -- ACE_FILE_IO * output: _str_line -- 输出字符串 * return: =0 -- 文件结束或数据为空,表示当前行为换行 * -1 -- 读取失败 * =1 -- 成功,且当前行数据不为空 *-----------------------------------------------------------------------*/ int Util::ace_read_line(ACE_FILE_IO &_file, std::string &_str_line) { char c; int i; _str_line.clear(); while ((i = _file.recv_n(&c, 1)) > 0) { if (c == '/r') continue; if (c == '/n') break; if (!isascii(c)) continue; _str_line += c; } if (i < 0) { return -1; } else if (i == 0) { if (_str_line.empty()) { return -1; } else { return 0; } } if (_str_line.empty()) return 0; return 1; } /*----------------------------------------------------------------------- * name: 写文件一行 * input: _file -- ACE_FILE_IO * _str_line -- 输入字符串 * output: * return: -1 -- 失败 * =1 -- 成功 *-----------------------------------------------------------------------*/ int Util::ace_write_line(ACE_FILE_IO &_file, const std::string &_str_line) { if (_str_line.size() > 0) if (_file.send_n(_str_line.c_str(), _str_line.size()) <= 0) return -1; if (_file.send_n("/n", 1) <= 0) return -1; return 1; } /*----------------------------------------------------------------------- * name: 以16进制打印报文 * input: str -- 报文信息 * len -- 报文长度 * output: * return: *-----------------------------------------------------------------------*/ /* void Util::fun_list(char str[], int len){ int i; printf("/n["); for(i=0; i<len; i++){ printf("%02X ", str[i]&0xFF); } printf("]/n"); } */ 3、main.cpp #include <stdio.h> #include <stdlib.h> #include <string> #include <ace/OS.h> #include "ffcs_common.h" int ACE_TMAIN(int argc, ACE_TCHAR* argv[]) { char str[16]; long val = 9988776; printf(Util::ltostr(val, str, sizeof(str))); printf("/n/n"); printf(Util::itostr(9988776, 10).c_str()); getchar(); return 0; }