#include #include "mymath.h" #include void Ascii_to_hex_char(char *dstbuf,char*rstbuf) { //char *p = "jyh:abcdefghijklmnop"; unsigned char i,len; len = strlen(rstbuf); //printf(rstbuf); for(i =0;i 0x39) highByte -= 0x37; else highByte -= 0x30; if (lowByte > 0x39) lowByte -= 0x37; else lowByte -= 0x30; dest[i/2] = (highByte << 4) | lowByte; } return ; } //字节流转换为十六进制字符串 void ByteToHexStr(const unsigned char* source, char* dest, int sourceLen) { short i; unsigned char highByte, lowByte; for (i = 0; i < sourceLen; i++) { highByte = source[i] >> 4; lowByte = source[i] & 0x0f ; highByte += 0x30; if (highByte > 0x39) dest[i * 2] = highByte + 0x07; else dest[i * 2] = highByte; lowByte += 0x30; if (lowByte > 0x39) dest[i * 2 + 1] = lowByte + 0x07; else dest[i * 2 + 1] = lowByte; } return ; } //字节流转换为十六进制字符串的另一种实现方式 void Hex2Str( const char *sSrc, char *sDest, int nSrcLen ) { int i; char szTmp[3]; for( i = 0; i < nSrcLen; i++ ) { sprintf( szTmp, "%02X", (unsigned char) sSrc[i] ); memcpy( &sDest[i * 2], szTmp, 2 ); } return ; } //将字符串转换为十进制三种方法的代码: int Myatoi(char *buf) { int result = 0; char ch; while((ch = *(buf++)) != '\0') { result = result*10 + ch-'0'; } return result; } //将十进制转成字符串 char * Myitoa(int val) { static char szTmp[4]; memset(szTmp,0,4); sprintf(szTmp, "%02d", val ); return szTmp; } /**************************************************************************** 函数名称: str_to_hex 函数功能: 字符串转换为十六进制 输入参数: string 字符串 cbuf 十六进制 len 字符串的长度。 输出参数: 无 *****************************************************************************/ int str_to_hex(char *string, unsigned char *cbuf, int len) { unsigned char high, low; int idx, ii=0; for (idx=0; idx='0' && high<='9') high = high-'0'; else if(high>='A' && high<='F') high = high - 'A' + 10; else if(high>='a' && high<='f') high = high - 'a' + 10; else return -1; if(low>='0' && low<='9') low = low-'0'; else if(low>='A' && low<='F') low = low - 'A' + 10; else if(low>='a' && low<='f') low = low - 'a' + 10; else return -1; cbuf[ii++] = high<<4 | low; } return 0; } /**************************************************************************** 函数名称: hex_to_str 函数功能: 十六进制转字符串 0->30 1->31 输入参数: ptr 字符串 buf 十六进制 len 十六进制字符串的长度。 输出参数: 无 *****************************************************************************/ void hex_to_str(char *ptr,unsigned char *buf,int len) { for(int i = 0; i < len; i++) { sprintf(ptr, "%02x",buf[i]); ptr += 2; } } /**************************************************************************** 函数名称: hexstr_to_byte 函数功能: 十六进制字符串转字节数字 *****************************************************************************/ int hexstr_to_byte(const unsigned char* source) { int i=0,ret=0; char dest[2]; for(i=0;i<2;i++) { dest[i]=source[i]-'0'; if((dest[i] < 0) || (dest[i] > 54)) return 0; if((dest[i]> 9) && (dest[i]< 23)) //A~F dest[i] -= 7; else if((dest[i]> 48) && (dest[i]<55)) //a~f dest[i] -= 39; // printf("dest[%d]:%d\r\n",i,dest[i]); } ret = dest[0]*16+dest[1]; return ret; } /**************************************************************************** 函数名称: decstr_to_int 函数功能: 十进制字符串转整型 *****************************************************************************/ int decstr_to_int(const unsigned char* src) { int i=0,ret=0; int len = strlen(src); for(i=0;i '9')) return -1; ret =ret*10+(src[i]-'0'); } return ret; } /**************************************************************************** src 源字符串的首地址(buf的地址) separator 指定的分割字符 dest 接收子字符串的数组 num 分割后子字符串的个数 *****************************************************************************/ void split(char *src,const char *separator,char **dest,int *num) { char *pNext; int count = 0; if (src == NULL || strlen(src) == 0) //如果传入的地址为空或长度为0,直接终止 return; if (separator == NULL || strlen(separator) == 0) //如未指定分割的字符串,直接终止 return; pNext = (char *)strtok(src,separator); //必须使用(char *)进行强制类型转换(虽然不写有的编译器中不会出现指针错误) while(pNext != NULL) { if(dest) *dest++ = pNext; ++count; pNext = (char *)strtok(NULL,separator); //必须使用(char *)进行强制类型转换 } if(num) *num = count; } /**************************************************************************** src 原始经纬度字符串 2231.88560,11356.42075 前面纬度,后面经度 lon 输出经度 lat 输出纬度 *****************************************************************************/ void Lon_to_f(char *str, float * lon, float * lat) { double longtitude,latitude; int lon_inter=0,lat_inter=0; sscanf(str, "%lf,%lf",&latitude,&longtitude); lon_inter =longtitude/100; *lon =(longtitude - lon_inter*100)/60+lon_inter; lat_inter =latitude/100; *lat =(latitude - lat_inter*100)/60+lat_inter; }