|
|
@ -1009,4 +1009,279 @@ Note : 本函数入参为网络字节序列
|
|
|
|
*************************************************************************/
|
|
|
|
*************************************************************************/
|
|
|
|
unsigned int int64To32(utint64 u64)
|
|
|
|
unsigned int int64To32(utint64 u64)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
unsigned int hi = (unsigned int)(( u64 >> 32) & 0xFFFFFFFF
|
|
|
|
unsigned int hi = (unsigned int)(( u64 >> 32) & 0xFFFFFFFF);
|
|
|
|
|
|
|
|
return hi;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// YYYY-MM-DD HH:MI:SS
|
|
|
|
|
|
|
|
void LocalTime2Bcd(char *pLocalTime, char *pBcd)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
char szDate[5]={0};
|
|
|
|
|
|
|
|
char tmpTime[13] = {0};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(pLocalTime == NULL || pBcd == NULL)
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
memcpy(tmpTime, pLocalTime+2, 2);
|
|
|
|
|
|
|
|
memcpy(tmpTime+2, pLocalTime+5, 2);
|
|
|
|
|
|
|
|
memcpy(tmpTime+4, pLocalTime+8, 2);
|
|
|
|
|
|
|
|
memcpy(tmpTime+6, pLocalTime+11, 2);
|
|
|
|
|
|
|
|
memcpy(tmpTime+8, pLocalTime+14, 2);
|
|
|
|
|
|
|
|
memcpy(tmpTime+10, pLocalTime+17, 2);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
asc_to_bcd((unsigned char*)tmpTime, 12, (unsigned char*)pBcd);
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|
|
|
Function : 检查字符串结束符
|
|
|
|
|
|
|
|
Param in :
|
|
|
|
|
|
|
|
psz : source string
|
|
|
|
|
|
|
|
length : input string length, max 128(Byte)
|
|
|
|
|
|
|
|
Param out : none
|
|
|
|
|
|
|
|
Return Code : valid string length
|
|
|
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
|
|
int getStringLen(unsigned char *pstr, int length)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
unsigned char szTmp[128+1] = {0} ;
|
|
|
|
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
memcpy(szTmp, pstr, length);
|
|
|
|
|
|
|
|
while(i < length) {
|
|
|
|
|
|
|
|
if((szTmp[i] & 0xff) != 0x00) {
|
|
|
|
|
|
|
|
length -= i;
|
|
|
|
|
|
|
|
memcpy(pstr, szTmp+i, length);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
i++;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
pstr[length] = 0x00;
|
|
|
|
|
|
|
|
while(--length) {
|
|
|
|
|
|
|
|
if((pstr[length] & 0xff) != 0x00 ) return length+1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return length;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
int getHexString(unsigned char *str, int length, unsigned char *pstr)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
int iLen = 0, iOff = 0;
|
|
|
|
|
|
|
|
char *p = (char*)str;
|
|
|
|
|
|
|
|
while ( *p == 0x00 ) {
|
|
|
|
|
|
|
|
p++;
|
|
|
|
|
|
|
|
length--;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
memcpy( (char*)str, p,length );
|
|
|
|
|
|
|
|
str[length] = 0x00;
|
|
|
|
|
|
|
|
while(iLen < length) {
|
|
|
|
|
|
|
|
iOff = (iLen * 2);
|
|
|
|
|
|
|
|
sprintf((char*)pstr+iOff, "%.2X", (str[iLen] & 0xff));
|
|
|
|
|
|
|
|
iLen++;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return (length * 2);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|
|
|
Function : 32位整数转二进制字符串
|
|
|
|
|
|
|
|
Param in :
|
|
|
|
|
|
|
|
num : source uint
|
|
|
|
|
|
|
|
Param out :
|
|
|
|
|
|
|
|
pBin : object strings.(min length = 32)
|
|
|
|
|
|
|
|
Return Code : none
|
|
|
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
|
|
void uint32_binstr(unsigned int num, char* pBin)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if(pBin == NULL) return ;
|
|
|
|
|
|
|
|
for( i=0; i < (int)(sizeof(int)*8); i++)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pBin[(sizeof(int)*8-1)-i] = (char)(((num >> i) & 1) + '0');
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
pBin[(sizeof(int)*8)] = 0x00; // 结束符
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|
|
|
Function : 64位整数转二进制字符串
|
|
|
|
|
|
|
|
Param in :
|
|
|
|
|
|
|
|
num : source uint
|
|
|
|
|
|
|
|
Param out :
|
|
|
|
|
|
|
|
pBin : object strings.(min length = 64)
|
|
|
|
|
|
|
|
Return Code : none
|
|
|
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
|
|
void uint64_binstr(utint64 num, char* pBin)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if(pBin == NULL) return ;
|
|
|
|
|
|
|
|
for(i=0; i < (int)(sizeof(utint64)*8); i++)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pBin[(sizeof(utint64)*8-1)-i] = (char)(((num >> i) & 1) + '0');
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
pBin[(sizeof(utint64)*8)] = 0x00; // 结束符
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|
|
|
Function : 二进制字符串转32位整数
|
|
|
|
|
|
|
|
Param in :
|
|
|
|
|
|
|
|
pBin : source bin string(eg. 1010101001111), need '\0' end.
|
|
|
|
|
|
|
|
Param out :
|
|
|
|
|
|
|
|
: none
|
|
|
|
|
|
|
|
Return Code : uint32 interger
|
|
|
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
|
|
unsigned int binstr_uint32(char *pBin)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
unsigned int n = 0;
|
|
|
|
|
|
|
|
int i, len = 0 ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(pBin == NULL) return 0 ;
|
|
|
|
|
|
|
|
len = strlen(pBin) ;
|
|
|
|
|
|
|
|
if(len > (int)(sizeof(int)*8))
|
|
|
|
|
|
|
|
len = (int)(sizeof(int)*8) ;
|
|
|
|
|
|
|
|
for(i=0; i < len; i++) {
|
|
|
|
|
|
|
|
n = n * 2 + (pBin[i] - '0');
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return n;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|
|
|
Function : 字符串反转
|
|
|
|
|
|
|
|
Param in :
|
|
|
|
|
|
|
|
str : source string(eg. 1010101001111), need '\0' end.
|
|
|
|
|
|
|
|
len : source length
|
|
|
|
|
|
|
|
Param out :
|
|
|
|
|
|
|
|
: str
|
|
|
|
|
|
|
|
Return Code : str, null is faild
|
|
|
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
|
|
char* strSwap(char* str,int len)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if(len <= 1) return str;
|
|
|
|
|
|
|
|
char temp = *str;
|
|
|
|
|
|
|
|
*str = *(str+len-1);
|
|
|
|
|
|
|
|
*(str+len-1) = temp;
|
|
|
|
|
|
|
|
return (strSwap( str+1, len-2)-1);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|
|
|
Function : 二进制字符串转64位整数
|
|
|
|
|
|
|
|
Param in :
|
|
|
|
|
|
|
|
pBin : source bin string(eg. 1010101001111), need '\0' end.
|
|
|
|
|
|
|
|
Param out :
|
|
|
|
|
|
|
|
: none
|
|
|
|
|
|
|
|
Return Code : utint64 interger
|
|
|
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
|
|
utint64 binstr_uint64(char *pBin)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
utint64 n = 0;
|
|
|
|
|
|
|
|
int i, len = 0 ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(pBin == NULL) return 0 ;
|
|
|
|
|
|
|
|
len = strlen(pBin) ;
|
|
|
|
|
|
|
|
if(len > (int)(sizeof(utint64)*8))
|
|
|
|
|
|
|
|
len = (int)(sizeof(utint64)*8);
|
|
|
|
|
|
|
|
for(i=0; i < len; i++) {
|
|
|
|
|
|
|
|
n = n * 2 + (pBin[i] - '0');
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return n;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|
|
|
Function : 将Linux文件路径转为Windows的路径格式, 仅测试用
|
|
|
|
|
|
|
|
Param in :
|
|
|
|
|
|
|
|
pszPath: source path
|
|
|
|
|
|
|
|
Param out :
|
|
|
|
|
|
|
|
: pszBootPath
|
|
|
|
|
|
|
|
Return Code : none
|
|
|
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
|
|
void Unix2WindowPath(char *pszPath)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// /mnt/fileserver/gathergps/10122045/p_gathergps_20130703123031.dat
|
|
|
|
|
|
|
|
char *p = NULL;
|
|
|
|
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
if (pszPath == NULL) return;
|
|
|
|
|
|
|
|
p = pszPath;
|
|
|
|
|
|
|
|
while(p[i] != 0x00)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if( p[i] == '/') p[i] = '\\';
|
|
|
|
|
|
|
|
i++;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
p[i] = 0x00;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|
|
|
Function : 将Windows文件路径转为Linux的路径格式, 仅测试用
|
|
|
|
|
|
|
|
Param in : pszPath -- source path
|
|
|
|
|
|
|
|
Param out :
|
|
|
|
|
|
|
|
: pszPath
|
|
|
|
|
|
|
|
Return Code : none
|
|
|
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
|
|
void Window2UnixPath(char *pszPath)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
char *p = NULL;
|
|
|
|
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
if (pszPath == NULL) return;
|
|
|
|
|
|
|
|
p = pszPath;
|
|
|
|
|
|
|
|
while (p[i] != 0x00) {
|
|
|
|
|
|
|
|
if (p[i] == '\\') p[i] = '/';
|
|
|
|
|
|
|
|
i++;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
p[i] = 0x00;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int stringcasecmp(const char *ps1, const char *ps2)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
|
|
|
//return strcmpi(ps1, ps2);
|
|
|
|
|
|
|
|
return _strcmpi(ps1,ps2);
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
return strcasecmp(ps1,ps2);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int stringncasecmp(const char *ps1, const char *ps2, int length)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
|
|
|
//return strnicmp(ps1,ps2,length);
|
|
|
|
|
|
|
|
return _strnicmp(ps1,ps2,length);
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
return strncasecmp(ps1,ps2,length);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|
|
|
Function : 获取uuid
|
|
|
|
|
|
|
|
Param in :
|
|
|
|
|
|
|
|
Param out :
|
|
|
|
|
|
|
|
: pszPath
|
|
|
|
|
|
|
|
Return Code : none
|
|
|
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
|
|
int getuuid(char *str, int inlen )
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
memset(str, 0x00, inlen);
|
|
|
|
|
|
|
|
#if defined(WIN32)||defined(WINCE)||defined(WIN64)
|
|
|
|
|
|
|
|
GUID guid;
|
|
|
|
|
|
|
|
if (!CoCreateGuid(&guid))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
snprintf(str,inlen,
|
|
|
|
|
|
|
|
"%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]);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
uuid_t uu;
|
|
|
|
|
|
|
|
uuid_generate(uu);
|
|
|
|
|
|
|
|
//uuid_generate_time(uu);
|
|
|
|
|
|
|
|
//uuid_generate_tims_safe(uu);
|
|
|
|
|
|
|
|
uuid_unparse(uu, str);
|
|
|
|
|
|
|
|
strMiddleTrim((unsigned char*)str);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return strlen(str);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|
|
|
Function : 获取1-100内的随机数
|
|
|
|
|
|
|
|
Param in :
|
|
|
|
|
|
|
|
Param out :
|
|
|
|
|
|
|
|
: pszPath
|
|
|
|
|
|
|
|
Return Code : none
|
|
|
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
|
|
double getRandByTime()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
srand((unsigned int)time(NULL));
|
|
|
|
|
|
|
|
return (double)((double)(rand()%100 + 1) / (double)(RAND_MAX / rand()));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|