| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #  | 
| #  | 
| ##@package CommFunc.py  | 
| # @todo: ¹«¹²µ÷Óú¯Êý¼¯  | 
| # @author:eggxp  | 
| # @date 2010-01-01 00:00  | 
| # @version 1.7  | 
| #  | 
| # ÐÞ¸Äʱ¼ä ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ  | 
| # @change: "2010-01-19 16:35"  zb  Ð޸Ĺ«¹²º¯ÊýµÄÒ»¸ö´íÎó,½â¾öСÀ®°ÈÊäÈë'²'×ֻᵼÖ¿ͻ§¶Ëµ¯¿òµÄÎÊÌâ  | 
| # @change: "2010-01-29 11:45"  chenxuewei  Ð޸Ĺ«¹²º¯ÊýReplaceBig5AppointSign(srcStr,sign,desSign)µÄÒ»¸ö´íÎó,½â¾ö×Ö·û´®srcStr×îºóÒ»¸ö×Ö½ÚµÄ×Ö·ûÌæ»»ÎÊÌâ  | 
| # @change: "2010-04-02 17:45"  zb  Ìí¼Ó¹«¹²º¯ÊýToDWORD()  | 
| # @change: "2010-04-02 20:30"  zb  ½«ReadBYTE()/ReadDWORD()/ReadDWORD(),¸Ä³ÉÎÞ·ûºÅÊý¶ÁÈ¡  | 
| # @change: "2010-09-27 15:55"  chenxuewei  ½«WriteBYTE()/WriteDWORD()/WriteDWORD(),¸Ä³É×Ô¶¯×ª»¯ÓÐÎÞ·ûºÅÊýдÈë  | 
| # @change: "2011-06-27 17:20" yyz ÒÆÖ²µ½Server¶Ë  | 
| # @change: "2013-01-18 18:45" hyx Ôö¼Ó»ñÈ¡×Ö·û´®CRC32µÄº¯Êý  | 
| #  | 
| #  | 
| #---------------------------------------------------------------------  | 
| #µ¼Èë  | 
| import os  | 
| import struct  | 
| import string  | 
| import math  | 
| import datetime  | 
| import subprocess  | 
| import binascii  | 
| #---------------------------------------------------------------------  | 
| #È«¾Ö±äÁ¿  | 
|   | 
| MODULE_NAME = "cmd_mail"  | 
|   | 
| VER = "2013-01-18 18:45"  | 
|   | 
|   | 
| ## ÓÃÓÚ·¢°ü£¬µ±·â°üÊÇDWORDµÄʱºò  | 
| #  @param num Êý×Ö  | 
| #  @return ÓзûºÅÊý×Ö  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£ºÓÃÓÚ·¢°ü£¬µ±·â°üÊÇDWORDµÄʱºò£¬×ª»»ÎªÓзûºÅÊý  | 
| def ToDWORD( num ):  | 
|     if num >= 0:  | 
|         return num  | 
|     return num + 4294967296  | 
|   | 
| ## ½«hexת»¯³É¶þ½øÖƶÔÓ¦µÄ×Ö·û´®£¬ÓÃÓÚ·¢°ü  | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º½«hexת»¯³É¶þ½øÖƶÔÓ¦µÄ×Ö·û´®£¬ÓÃÓÚ·¢°ü  | 
| def HexToBin (hexStr):  | 
|     returnStr = ''  | 
|     hexStrLen = len(hexStr)  | 
|     for i in [j for j in range(hexStrLen) if j%2==0]:  | 
|         returnStr += chr(string.atoi(hexStr[i:i+2],16))  | 
|     return returnStr  | 
|   | 
| #»ñÈ¡Òì³£ÐÅÏ¢#£¨try:...except:..GetExceptionInfo()£©  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def GetExceptionInfo():  | 
|     import traceback  | 
|     return traceback.format_exc()  | 
|   | 
|   | 
| #Ö´ÐÐcmdÖ¸Áî  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def RunCmd(curCmd):  | 
|     pipe = subprocess.Popen(['cmd', ""], shell = False,  | 
|                                  stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE)  | 
|     pipe.stdin.write('%s\n'%curCmd)  | 
|     pipe.stdin.close()  | 
|     retStr = pipe.stdout.read()  | 
|     retStr += pipe.stderr.read()  | 
|     print retStr  | 
|     return retStr  | 
|   | 
|   | 
| #È¡µÃ´úÂëÖÐÕæÊµµÄ×Ö·û´®£¨Èç²ÎÊýsrcStrÊÇ'\n',»áµÃµ½»Ø³µ·û£©  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def GetCodeStr(srcStr):  | 
|     desStr = srcStr.replace("'", "\\'")  | 
|     cmd = "desStr='" + desStr + "'"  | 
|     exec(cmd)  | 
|     return desStr   | 
|   | 
|   | 
| #pythonдÎļþ:  | 
| #    f = file('c:\\fuck.txt', 'a')  | 
| #    f.write(mapObsData)  | 
|   | 
| #µÈ´ýÊäÈë: raw_input()  | 
|   | 
| #´´½¨Socket  | 
| #s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)  | 
| #s.bind(('192.168.0.81', 6112))  | 
| #s.listen(1)  | 
|   | 
| #»ñµÃ×ÓĿ¼:  | 
| #os.path.abspath  | 
|   | 
| #µÈ´ýÊäÈë:  | 
| #raw_input()  | 
|   | 
| #µÃµ½±¾Ä¿Â¼:  | 
| #os.getcwd()  | 
|   | 
| #µÃµ½²ÎÊý:  | 
| #os.sys.argv  | 
|   | 
| #µÃµ½python·¾¶  | 
| #os.sys.executable  | 
|   | 
| #ÔËÐÐÍⲿÎļþ/½áÊøÍⲿÎļþ  | 
| #processID = os.spawnl(os.P_NOWAIT, pythonPath, '-p', os.path.join(curPath, 'test.py'))  | 
| #win32api.TerminateProcess(processID, 0)  | 
|   | 
|   | 
| #pythonµÄ¶ÁÈ¡/дÈë¿â  | 
|   | 
| #------------------------¶ÁÈ¡   | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def ReadBYTE(buf, pos):  | 
|     curValue = struct.unpack_from('B', buf, pos)  | 
|     pos += 1  | 
|     return curValue[0], pos  | 
|   | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def ReadWORD(buf, pos):  | 
|     curValue = struct.unpack_from('H', buf, pos)  | 
|     pos += 2    | 
|     return curValue[0], pos  | 
|   | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def ReadDWORD(buf, pos):  | 
|     curValue = struct.unpack_from('I', buf, pos)    | 
|     pos += 4  | 
|     return curValue[0], pos  | 
|   | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def ReadFloat(buf, pos):  | 
|     curValue = struct.unpack_from('f', buf, pos)    | 
|     pos += 4  | 
|     return curValue[0], pos  | 
|   | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def ReadDouble(buf, pos):  | 
|     curValue = struct.unpack_from('d', buf, pos)    | 
|     pos += 8  | 
|     return curValue[0], pos  | 
|   | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def ReadString(buf, pos, _len):  | 
|     curValue = struct.unpack_from('%ds'%_len, buf, pos)  | 
|     pos += _len    | 
|     return curValue[0], pos  | 
|   | 
|   | 
| #----------------------дÈë  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def Pack(sign, value):  | 
|       | 
|     if value < 0:  | 
|         sign = sign.lower()  | 
|     else:  | 
|         sign = sign.upper()  | 
|       | 
|     return struct.pack(sign, value)  | 
|           | 
|           | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def WriteBYTE(buf, value):  | 
|     buf += Pack('B', value)  | 
|     return buf  | 
|   | 
|   | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def WriteWORD(buf, value):  | 
|     buf += Pack('H', value)  | 
|     return buf  | 
|   | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def WriteDWORD(buf, value):  | 
|     buf += Pack('I', value)  | 
|     return buf  | 
|   | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def WriteFloat(buf, value):  | 
|     buf += struct.pack('f', value)  | 
|     return buf  | 
|   | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def WriteDouble(buf, value):  | 
|     buf += struct.pack('d', value)  | 
|     return buf  | 
|   | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def WriteString(buf, len, value):  | 
|     buf += struct.pack('%ds'%len, value)  | 
|     return buf  | 
|   | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def GetDistance(srcX, srcY, destX, destY):  | 
|     return math.sqrt(pow(srcX - destX, 2) + pow(srcY - destY, 2))  | 
|       | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def MovePos(srcX, srcY, destX, destY, curMoveDist):  | 
|     if curMoveDist == 0:  | 
|         return  srcX, srcY  | 
|       | 
|     totalDist = GetDistance(srcX, srcY, destX, destY)  | 
|     if totalDist == 0:  | 
|         return  srcX, srcY  | 
|       | 
|     resultX = curMoveDist / float(totalDist) * (destX - srcX) + srcX  | 
|     resultY = curMoveDist / float(totalDist) * (destY - srcY) + srcY  | 
|     return resultX, resultY   | 
|       | 
|   | 
| ##²âÊÔ´úÂë:  | 
| #strs = 'ÃÀÏãÊÇÖí'  | 
| #buf = ''  | 
| #buf = WriteString(buf, len(strs), strs)  | 
| #value, pos = ReadString(buf, 0, len(strs))  | 
| #print value  | 
|   | 
| #»ñµÃµ±Ç°ÏµÍ³Ê±¼ä  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def GetCurrentDataTimeStr():  | 
|     curTime = datetime.datetime.today()  | 
|     curTimeStr = str(curTime)  | 
|     curTimeStr = curTimeStr.split(".")[0]  | 
|     return curTimeStr  | 
|   | 
| #»ñµÃϵͳʱ¼ä(²ÎÊý -> Ê±¼äÁбí)  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def GetDateTimeByStr(timeStr):  | 
|     timeStr = timeStr.split(".")[0]  | 
|     return  datetime.datetime.strptime(timeStr, "%Y-%m-%d %H:%M:%S")  | 
|       | 
|       | 
|       | 
| #×Ö·û´®×ª»»ÎªÕûÐÍ, Èç¹û²»ÄÜת»», ·µ»ØÄ¬ÈÏÖµ  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def ToIntDef(input, defValue = 0):  | 
|     try:  | 
|         result = int(input)  | 
|         return result  | 
|     except ValueError:  | 
|         return defValue  | 
|       | 
| #16½øÖÆÑÕɫת»»  | 
| #"#FFFFFF"--"255,255,255"  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def HcToSc(h):  | 
|     h="0x"+h[1:7]  | 
|     red=string.atoi(h[:2]+h[2:4], base=16)  | 
|     green=string.atoi(h[:2]+h[4:6], base=16)  | 
|     blue=string.atoi(h[:2]+h[6:8], base=16)  | 
|     cStr=str(red)+","+str(green)+","+str(blue)  | 
|     return cStr  | 
|   | 
| #"255,255,255"--"#FFFFFF"  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def ScToHc(s):  | 
|     red=hex(string.atoi(s.split(",")[0]))[2:]  | 
|     green=hex(string.atoi(s.split(",")[1]))[2:]  | 
|     blue=hex(string.atoi(s.split(",")[2]))[2:]  | 
|     hStr="#"+str(red+green+blue)  | 
|     return hStr  | 
|   | 
| #16½øÖÆ×ª»»  | 
| #"0xFFFFFF"--"255,255,255"  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def HdToSd(h):  | 
|     red=string.atoi(h[0:2]+h[2:4], base=16)  | 
|     green=string.atoi(h[0:2]+h[4:6], base=16)  | 
|     blue=string.atoi(h[0:2]+h[6:8], base=16)  | 
|     cStr=str(red)+","+str(green)+","+str(blue)  | 
|     return cStr  | 
|   | 
| #"255,255,255"--"0xFFFFFF"  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def SdToHd(s):  | 
|     red=hex(string.atoi(s.split(",")[0]))[2:]  | 
|     green=hex(string.atoi(s.split(",")[1]))[2:]  | 
|     blue=hex(string.atoi(s.split(",")[2]))[2:]  | 
|     hStr="0x"+str(red+green+blue)  | 
|     return hStr  | 
|   | 
| #Ìáʾ³ýÁã´íÎóµÄEVAL  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def SafeEval(value):  | 
|     try:  | 
|         return eval(value)  | 
|     except ZeroDivisionError:  | 
|         return "Division is Zero"  | 
|   | 
| ##Éú³ÉÖ¸¶¨Îļþ£¨Èçpar£ºr'E:\¿ª·¢°æ±¾\Data\logo\formName1.log'£©  | 
| #def MakeAppointFile(par):  | 
| #    dir = os.path.dirname(par)  # »ñµÃÎļþĿ¼  | 
| #    os.makedirs(dir)  # ´´½¨¶à¼¶Ä¿Â¼  | 
| #    file = open(os.path.basename(par),'w')  | 
| #    file.close()  | 
| #  | 
| ##ÔÚÖ¸¶¨Ä¿Â¼¸ù¾Ýµ±Ç°Ê±¼äÉú³ÉÐÂĿ¼£¨Èçpar£ºr'E:\¿ª·¢°æ±¾\Data\logo'£©  | 
| #def MakeCurTimeDir(par):  | 
| #    if not os.path.exists(par):  # ´«½øÀ´µÄĿ¼²»´æÔÚ  | 
| #        return  | 
| #    path=par+'\\'+str(datetime.datetime.today()).split()[0]  | 
| #    if not os.path.exists(path):  # Îļþ¼ÐÊÇ·ñ´æÔÚ£¬²»´æÔÚÔò´´½¨  | 
| #        os.mkdir(path)  # ´´½¨Îļþ¼Ð  | 
|           | 
| #Éú³ÉÖ¸¶¨Ä¿Â¼£¨Èçpar£ºr'E:\¿ª·¢°æ±¾\Data\logo'£©  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def MakeAppointDir(par):  | 
|     if not isinstance(par,str):  | 
|         return  | 
|     pathList=par.split('\\')  | 
|     path=pathList[0]  | 
|     for i in range(1,len(pathList)):  | 
|         path+='\\'+pathList[i]  | 
|         if not os.path.exists(path):  # Îļþ¼ÐÊÇ·ñ´æÔÚ£¬²»´æÔÚÔò´´½¨  | 
|             os.mkdir(path)  # ´´½¨Îļþ¼Ð  | 
|                   | 
| #Éú³ÉÖ¸¶¨Îļþ£¨Èçpar£ºr'E:\¿ª·¢°æ±¾\Data\logo\formName1.log'£©  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def MakeAppointFile(par):  | 
|     if not isinstance(par,str):  | 
|         return  | 
|     pathList=par.split('\\')  | 
|     path=pathList[0]  | 
|     for i in range(1,len(pathList)):  | 
|         path+='\\'+pathList[i]  | 
|         if i==len(pathList)-1:  | 
|             file=open(path,'w')  | 
|             file.close()  | 
|         else:  | 
|             if not os.path.exists(path):  # Îļþ¼ÐÊÇ·ñ´æÔÚ£¬²»´æÔÚÔò´´½¨  | 
|                 os.mkdir(path)  # ´´½¨Îļþ¼Ð  | 
|   | 
| #ÔÚÖ¸¶¨Ä¿Â¼¸ù¾Ýµ±Ç°Ê±¼äÉú³ÉÐÂĿ¼£¨Èçpar£ºr'E:\¿ª·¢°æ±¾\Data\logo'£©  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def MakeCurTimeDir(par):  | 
|     if not os.path.exists(par):  # ´«½øÀ´µÄĿ¼²»´æÔÚ  | 
|         return  | 
|     path=par+'\\'+str(datetime.datetime.today()).split()[0]  | 
|     if not os.path.exists(path):  # Îļþ¼ÐÊÇ·ñ´æÔÚ£¬²»´æÔÚÔò´´½¨  | 
|         os.mkdir(path)  # ´´½¨Îļþ¼Ð  | 
|   | 
|   | 
| #µÃµ½Ìæ»»ºóµÄ×Ö·û´®£¨²ÎÊý£ºstringÊÇÐèÒªÌæ»»µÄ×Ö·û´®£»varlistΪ²»¶¨²Î£¬ÎªÌæ»»ÄÚÈÝ£©  | 
| #ÈçGetReplaceString('str%s%s','str1','str2','str3','str4'),return½á¹ûΪ'strstr1str2'  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def GetReplaceString(string,*varlist):  | 
|     if '%' not in string:  | 
|         return string  | 
|     repalceCount = len(varlist)  # Ìæ»»´ÎÊý  | 
|     newStr = string  | 
|     if '%%' in string:  | 
|         newStr = string.replace('%%','')  # È¥³ý×Ö·û´®strÄÚµÄ'%%'  | 
|     needReplaceCount = newStr.count('%')  # ×Ö·û´®newStrÄÚµÄ'%'¸öÊý,¼´ÐèÒªÌæ»»µÄ´ÎÊý  | 
|     if repalceCount < needReplaceCount:  | 
|         tempList = list(varlist)  | 
|         for i in range(needReplaceCount-repalceCount):  | 
|             tempList.append(0)  | 
|         replaceTuple= tuple(tempList)  | 
|         #¸æËßµ÷ÓÃÕߣ¬²ÎÊý´«ÉÙÁË  | 
|         return 'func:GetReplaceString();error:the parameter lack'  | 
| #        return string%replaceTuple  | 
|           | 
|     replaceTuple = tuple(varlist[:needReplaceCount])  | 
|     return string%replaceTuple  | 
|   | 
|   | 
| #½«unicode±àÂëת»»³ÉÖÐÎÄ×Ö·û(²ÎÊý£º"#19968"-"#40869"Ö®¼ä)  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def UnicodeStrToGBKStr(U_STR):#ÈçÊäÈë"#23435",»ñµÃ·µ»ØÖµ"ËÎ"  | 
|     import re  | 
|     import ShareDefine  | 
|     RegularExpression="#[0-9]+"  | 
|     if not re.match(RegularExpression,U_STR):  | 
|         return U_STR  | 
|     UnicodeNum=int(U_STR[1:])  | 
|     CODEC = ShareDefine.Def_Game_Character_Encoding  | 
|     try:  | 
|         unicode_string=eval("u'\u%s'"%((hex(UnicodeNum))[2:]))  | 
|         GBK_str=unicode_string.encode(CODEC)  | 
|     except:  | 
|         return U_STR  | 
|     return GBK_str  | 
|      | 
|      | 
| #ÓÃÖ¸¶¨×Ö·ûdesSignÌæ»»·±Ìå×Ö·û´®srcStrµÄÖ¸¶¨µ¥×Ö½Ú×Ö·ûsign  | 
| ##   | 
| #  @param ²ÎÊý  | 
| #  @return ·µ»ØÖµ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷£º  | 
| def ReplaceBig5AppointSign(srcStr,sign,desSign):  | 
|       | 
|     isContinue = False  | 
|     desStr = ''  | 
|       | 
|     for i in range( len(srcStr) ):  | 
|               | 
|         if isContinue:  | 
|             #Èç¹û×îºóÁ½¸ö×Ö½Ú¸ÕºÃÊÇÒ»¸ö·±Ìå×Ö£¬Ôòµ¹ÊýµÚ¶þ¸ö×Ö½Úʱ»áÅж¨£¬×îºóÒ»¸ö×Ö½ÚÔòÔÚ´ËÌø¹ý  | 
|             isContinue = False  | 
|             continue  | 
|           | 
|         #Òѵ½×Ö·û´®×îºóÒ»¸ö×Ö½Ú£¬²Ù×÷ÍêÌø³öÑ»·  | 
|         if i == len(srcStr)-1:  | 
|               | 
|             if srcStr[i] == sign:  | 
|                 #Ìæ»»  | 
|                 desStr = desStr + desSign  | 
|             else:  | 
|                 desStr = desStr + srcStr[i]  | 
|               | 
|             break  # Ìø³öÑ»·  | 
|           | 
|         if 129 <= ord(srcStr[i]) <= 254:  # ÅжÏÊÇ·ñÔÚBig5¸ßλ×Ö½Ú·¶Î§ÄÚ  | 
|               | 
|             if 64 <= ord(srcStr[i+1]) <= 126 or 161 <= ord(srcStr[i+1]) <= 254:  # ÅжÏÊÇ·ñBig5µÍλ×Ö½Ú·¶Î§ÄÚ  | 
|                 isContinue = True  # Ï´ÎÅжϸß×Ö½Úʱ£¬¿ÉÌø¹ýÒ»´ÎÑ»·  | 
|                 desStr = desStr + srcStr[i:i+2]  | 
|             else:  | 
|                 #²»ÔÚBig5µÍλ×Ö½Ú·¶Î§ÄÚ  | 
|                 if srcStr[i] == sign:  | 
|                     #Ìæ»»  | 
|                     desStr = desStr + desSign  | 
|                 else:  | 
|                     desStr = desStr + srcStr[i]  | 
|         else:  | 
|             #²»ÔÚBig5¸ßλ×Ö½Ú·¶Î§ÄÚ  | 
|             if srcStr[i] == sign:  | 
|                 #Ìæ»»  | 
|                 desStr = desStr + desSign  | 
|             else:  | 
|                 desStr = desStr + srcStr[i]  | 
|           | 
|     return desStr  | 
|   | 
|   | 
| ## »ñÈ¡×Ö·û´®µÄCRC  | 
| #  @param msg ×Ö·û´®  | 
| #  @return CRC  | 
| def GetStrCrc(msg):  | 
|     crc = binascii.crc32(msg)  | 
|     return crc & 0x7fffffff  | 
|   | 
| ## »ñÈ¡½Ø¶ÏºóµÄ×Ö·û´®  | 
| #  @param srcStr Ô´×Ö·û´®  | 
| #  @param maxLen ×î´ó³¤¶È  | 
| #  @return  | 
| def GetStrCutoff(srcStr, maxLen):  | 
|     import ShareDefine  | 
|     if len(srcStr) <= maxLen:  | 
|         return srcStr  | 
|     tempComment = srcStr[:maxLen]  | 
|     # Ò»°ã×î¶àÁ½´Î¼´¿É  | 
|     for i in xrange(10):  | 
|         try:  | 
|             return tempComment[:maxLen-i].decode(ShareDefine.Def_Game_Character_Encoding).encode(ShareDefine.Def_Game_Character_Encoding)  | 
|         except:  | 
|             pass  | 
|           | 
|     return ""  | 
|   | 
| def RMBToCoin(floatRMB):  | 
|     ''' Ôª×ªÎª·Ö£¬Í³Ò»º¯Êý£¬·½±ãÐ޸ļ°ËÑË÷  | 
|     @param floatRMB: µ¥Î»Ôª£¬float ÀàÐÍ£¬Ö§³Ö RMB »ò ÃÀÔª  | 
|     @return: ×ª»¯Îª·ÖÊýÖµ  | 
|     '''  | 
|     # ÓÉÓÚfloat»áÓв»¾«È·µÄÏÖÏó³öÏÖxxx.9999999µÄÎÊÌ⣬ËùÒÔÕâÀï¼ÆËã³öµÄ½á¹ûÏòÉÏÈ¡Õû  | 
|     return int(math.ceil(floatRMB * 100))  | 
|   |