前言
近期做測試模擬器用到了hex-bytes-str之間的轉換bcc碼的校驗,這里總結了一些方法。
實例
直接上代碼
- 轉為十六進制(Hex)字符串
def getStringFromNumber(self,size,value): """ 轉為十六進制(Hex)字符串 :param size: :param value: :return: """ size=int(size) value=int(value) by = bytearray([]) for i in range(1,size+1): val = value >> 8 * (size - i) & 255 by.append(val) val = by.hex() print("===============================") print("%s轉為%s個字節十六進制(Hex)字符串:%s"%(value,size,val)) print("===============================") return val getStringFromNumber(5,11)
執行代碼:
方法:getStringFromNumber(size,value)參數一為生成幾個batys,參數二為被轉化數字
- 生成bcc校驗碼
def bcc(self,value): """ bcc 檢查碼 :param number: :return: """ numb = len(number) nb = int(numb / 2) bcc = 0 for i in range(nb): a = 2 * i b = 2 * (i + 1) aa = number[a:b] bcc = bcc ^ int(aa, 16) print("===============================") print("生成bcc碼:%s" % f'{bcc:x}') print("===============================") return f'{bcc:x}' bcc('11111111111111111111111111111111111111111111111111111111111222222222222222222222')
執行代碼:
方法:bcc(value)參數被轉化數字
- 時間字節數組(byte[])轉為十六進制(Hex)字符串和解碼時間
def datetime(self): """ 字節數組(byte[])轉為十六進制(Hex)字符串 :return: """ print("===============================") current_time = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())) datatime = current_time[2:] by = bytearray([]) aa = datatime.split("-") for val in aa: by.append(int(val)) val = by.hex() print("當前%s轉化十六進制:%s" % (current_time, val)) return val def time_hex_dec(self,number): """ 時間解碼 :param number: :return: """ numb = len(number) nb = int(numb / 2) datatime=[] for i in range(nb): a = 2 * i b = 2 * (i + 1) num = number[a:b] datatime.append(num) Gettime ="20" for key,val in enumerate(datatime): b = eval("0x" + val) Gettime += str(b) if key <5: Gettime = Gettime +"-" print('時間解碼:%s' % Gettime) print("===============================") return Gettime time = datetime() time_hex_dec(time)
執行代碼:
方法:time (value)參數被轉化數字 time_hex_dec(time)解碼時間
- 字符串轉16進制 與 16進制轉字符串
def str_to_hex(self,data): """ # 字符串轉16進制 :param data: :return: """ print("===============================") str_16 = binascii.b2a_hex(data.encode('utf-8')) print("字符串%s轉16進制:%s"%(data,str_16)) return str_16 def hex_to_str(self,data): """ # 16進制轉字符串 :param data: :return: """ strs = (binascii.unhexlify(data)).decode() print("16進制%s轉字符串:%s"%(data,strs)) print("===============================") return strs data = str_to_hex("wencheng你好") hex_to_str(data)
執行代碼:
方法:str_to_hex(value) ,hex_to_str(data)
- 字符串轉字節 str --> bytes與字節轉字符串 bytes --> str
def str_to_bytes(self,b): """ 字符串轉字節 str --> bytes :param b: :return: """ print("===============================") print(str.encode(b)) # 默認 encoding="utf-8" print(bytes(b, encoding="utf8")) print(b.encode()) # 默認 encoding="utf-8" return str.encode(b) def bytes_to_str(self,a): """ 字節轉字符串 bytes --> str :param b: :return: """ print(bytes.decode(a)) # 默認encoding="utf-8" print(str(a, encoding="utf-8")) print(a.decode()) # 默認 encoding="utf-8" print("===============================") data = str_to_bytes("wencheng你好") bytes_to_str(data)
執行代碼:
方法:str_to_bytes(value) ,bytes_to_str(data)
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家的支持。
更多文章關注小編公眾號:自動化測試 To share