123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import random
- import string
- import struct
- import time
- def get_random_str(num, seq=string.ascii_letters):
- ret_list = []
- for i in range(1, num + 1):
- ret_list.append("".join(random.sample(seq, 1)))
- return "".join(ret_list)
- def make_six_bytes_session_id():
- # 至少可以用到2050
- ts = long(time.time() * 100000)
- ts = ts + long(get_random_str(2, seq = string.digits))
- return fill_2_hexByte(hex(ts), 12)
- def hexbyte_2_bin(hexCode):
- binTemp = bin(int(hexCode, 16))
- needNum = 8 - len(binTemp) + 2
- c = '00000000'
- result = c[0:needNum] + binTemp[2::]
- return result
- def decimal_2_hexByte(decimalCode):
- hexTemp = hex(decimalCode)
- c = '00'
- needNum = 2 - len(hexTemp) + 2
- result = c[0:needNum] + hexTemp[2::]
- return result
- def fill_2_hexByte(hexCode, num = 4, reverse = False):
- hexCode = hexCode.replace('L', '')
- tList = ['0' for _ in range(num)]
- c = ''.join(tList)
- needNum = len(c) + 2 - len(hexCode)
- if needNum <= 0:
- return hexCode[2::].upper()
- result = c[0:needNum] + hexCode[2::]
- if reverse:
- return reverse_hex(result).upper()
- return result.upper()
- def pack_float(value, reverse = False):
- """
- 将浮点数转换为16进制转换的 float
- :param value: 浮点数
- :param reverse: 小端 (True)或者 大端
- :return:
- """
- sign = ">f" if not reverse else "<f"
- return struct.pack(sign, value).encode("hex")
- def asc_to_string(ascString):
- result = ''
- for ii in range(len(ascString) / 2):
- char = int(ascString[ii * 2:ii * 2 + 2], 16)
- if char == 0:
- break
- result += chr(char)
- return result
- def unpack_float(value, reverse = False):
- """
- 解析16进制浮点数
- :param value: 16进制浮点数
- :param reverse:小端 (True)或者 大端
- :return:
- """
- sign = ">f" if not reverse else "<f"
- return struct.unpack(sign, value.decode("hex"))[0]
- def reverse_hex(hexNum):
- newHexNum = ""
- while hexNum:
- newHexNum += hexNum[-2:]
- hexNum = hexNum[: -2]
- return newHexNum
- def calc_crc(data):
- checkSum = 0
- for ii in range(len(data) / 2):
- hexByte = int(data[2 * ii:2 * ii + 2], 16)
- checkSum = checkSum ^ hexByte
- checkSum = fill_2_hexByte(hex(checkSum), 1)
- return str(checkSum)
|