美文网首页
【Python】编码及数据类型转化

【Python】编码及数据类型转化

作者: Blue_Well | 来源:发表于2020-05-01 23:51 被阅读0次

Python的编码方式我觉得是比较复杂的,各种进制的相互转换容易忘记,特别是在嵌入式中经常需要Hex或者BIN格式也是比较头疼,这里专门写一篇文章记录一些比较经常遇到转换方式。

Python提供的open()函数提供多种文件打开的方式,但是总的来说打开类型只有两种,一种是文本格式,比如(.txt);;(.c)等,一种是BIN格式,比如(.bin);;(.jpg)等,下面的方法都是针对open()函数可能需要处理的格式。

  • 将str类型转成bin类型
  1. 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文件。

  1. 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类型
  1. bin_hex2str
    输入的数据:

最后想输出:
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类型的,可以上述的方法进行转换.

  1. 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)]])

相关文章

网友评论

      本文标题:【Python】编码及数据类型转化

      本文链接:https://www.haomeiwen.com/subject/fhgemhtx.html