Python的编码方式我觉得是比较复杂的,各种进制的相互转换容易忘记,特别是在嵌入式中经常需要Hex或者BIN格式也是比较头疼,这里专门写一篇文章记录一些比较经常遇到转换方式。
Python提供的open()函数提供多种文件打开的方式,但是总的来说打开类型只有两种,一种是文本格式,比如(.txt);;(.c)等,一种是BIN格式,比如(.bin);;(.jpg)等,下面的方法都是针对open()函数可能需要处理的格式。
- 将str类型转成bin类型
- str_hex2bin(hex)
输入的数据:
contentStr = '1011121314151617180A0B0C0D0E0F'
最后想输出的是:
contentBytes (10 11 12 13 14 15 16 17 18 0A 0B 0C 0D 0E 0F)
实现方法:
contentStr = ''.join([chr(int(b, 16)) for b in [contentStr[s:s + 2] for s in range(0, len(contentStr), 2)]])
contentBytes = contentStr.encode(encoding='iso-8859-1')
#写入到bin文件中
with open(filePath, 'wb') as f:
f.write(contentBytes)
f.close()
应用场景:
.c文件中的数组,提取成bin文件。
- str2hex
输入的数据:
contentStr = 'abcdefg'
最后想输出的是:
contentBytes (61 62 63 64 65 66 67)
这里方法可能需要绕一下,上面的例子知道可以将str_hex2bin,意思就是我们需要先将str转换成hex,即ASCII码的格式,然后再套用上面的方法转成Bytes类型进而写入bin文件中。
实现方法:
contentStr = 'abcdefg'
contentStr = ' '.join([str(hex(ord(c))) for c in contentStr]).replace('0x', '')
- 将bin(hex)类型转成str类型
- bin_hex2str
输入的数据:
![](https://img.haomeiwen.com/i12574551/f9255e4fd90447d8.png)
最后想输出:
contentStr = '00 00 00 00 00 00 00 00 00 00 00 00 00 83 1a 4c 2b ......'
实现方法:
content = str(binascii.b2a_hex(content)).replace("b'", '').replace("'", '')
应用场景:
如果我们用下面的方法打开一个BIN文件,那么Python给我们返回的是上图所示的数据:
with open(self.currentFilePath, 'rb') as f:
content = f.read()
f.close()
如果我们要输出到界面或者做其他处理需要str类型的,可以上述的方法进行转换.
- hex2str:
输入的数据:
contentStr = '61 62 63 64 65 66 67'
想要输出的数据:
contentStr = 'abcdefg'
实现方法
contentStr = '61 62 63 64 65 66 67'
contentStr = contentStr.replace('\n', '').replace('\t', '').replace(' ', '')
contentStr = ''.join([chr(int(b, 16)) for b in [contentStr[s:s + 2] for s in range(0, len(contentStr), 2)]])
网友评论