进制与字符串转换
- 字符串转十六进制
1 #方法1: 2 #!/usr/bin python3 3 #-*-coding=utf-8-*- 4 import binascii 5 6 #若传入的是二进制串,可用以下函数 7 def str_to_hex1(s): #s=b'hello' 8 s=binascii.hexlify(s) #hexlify()传入的参数也可以是b'xxxx'(xxxx要符合16进制特征) 9 print(s.decode('utf-8')) #s的类型是bytes类型,用encode()方法转化为str类型 10 11 #若传入的是文本串,可以用一下函数 12 def str_to_hex2(s): #s="hello" 13 print("".join([hex(ord(c)).replace('0x','') for c in s])) 14 15 #方法2: 16 # base = input("请输入要转换的字符串:") 17 base = '$GPGGA,,,,,,0,,,,,,,,*66\r\n' 18 by = bytes(base, 'UTF-8') # 先将输入的字符串转化成字节码 19 hexstring = by.hex() # 得到16进制字符串,不带0x 20 print(hexstring) 21 22 # 输出如下: 23 # 请输入要转换的字符串:大多数 24 # e5a4a7e5a49ae695b0 25 26 a = int(hexstring,16) #将16进制字符串转换成整数 27 hex_name = hex(a) # 得到16进制字符串,带0x;输出如下 28 29 # 请输入要转换的字符串:大声 30 # 0xe5a4a7e5a3b0
2.十六进制转字符串
1 #方法1: 2 import base64 3 4 hex_str = '2447504747412c2c2c2c2c2c302c2c2c2c2c2c2c2c2a36360d0a' 5 print(base64.b16decode(hex_str.upper())) 6 #b'$GPGGA,,,,,,0,,,,,,,,*66\r\n' 7 8 #方法2: 9 import binascii 10 11 def hexStr_to_str(hex_str): 12 hex = hex_str.encode('utf-8') #将其转为16进制数 13 str_bin = binascii.unhexlify(hex) #转为该16进制对应的ascii字符串 14 return str_bin.decode('utf-8') #再转为字符串 15 16 if __name__ == "__main__": 17 hex_str = '2447504747412c2c2c2c2c2c302c2c2c2c2c2c2c2c2a36360d0a' 18 print(hexStr_to_str(hex_str)) 19 #$GPGGA,,,,,,0,,,,,,,,*66 20 21 22 #方法3: 23 #!/usr/bin python3 24 #-*-coding=utf-8-*- 25 import binascii 26 27 #若传入的是一连串16进制串,可用以下函数 28 def hex_to_str1(s): #s="68656c6c6f" 29 s=binascii.unhexlify(s) #unhexlify()传入的参数也可以是b'xxxx'(xxxx要符合16进制特征) 30 print(s.decode('utf-8')) #s的类型是bytes类型,用encode()方法转化为str类型 31 32 #若传入的是用空格隔开的16进制串,可以用一下函数 33 def hex_to_str2(s): #s="68 65 6c 6c 6f" 34 print("".join([chr(i) for i in [int(b,16) for b in s.split(' ')]])) 35 36 hex_to_str2('24 47 4E 47 53 41 2C 41 2C 31 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2A 32 43 0D 0A') 37 #$GNGSA,A,1,,,,,,,,,,,,,,,,*2C