Python 字符串与十进制的转换 深碍√TFBOYSˉ_ 2022-05-15 14:21 2088阅读 0赞 **写在前面** 我真是要气死了!每次都记不住python字符串和十进制之间的转换!每次用到还要各种查资料问别人,结果都要花好久的时间……这种情况不下3次!!这次一定要记下来! **python2.7** 字符串转为十进制:首先要将字符串转为16进制,再转为十进制 十进制转为字符串:首先要将十进制转为16进制,再转为字符串 import binascii string = 'You are the best! Fighting!!!' string_int1 = int(binascii.hexlify(string),16) string_int2 = int(binascii.b2a_hex(string),16) string_int3 = int(string.encode('hex'),16) print string_int1 print string_int2 print string_int3 int_string1 = binascii.unhexlify(hex(string_int1)[2:-1]) int_string2 = binascii.a2b_hex(hex(string_int1)[2:-1]) int_string3 = hex(string_int1)[2:-1].decode('hex') print int_string1 print int_string2 print int_string3 结果: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70] 官方解释: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70 1] binascii.b2a\_hex(data)意思是将二进制流data转为十六进制,data的每一个比特都被转为对应十六进制的2位,因此返回结果是data长度的二倍。 binascii.b2a\_hex(data)意思是将十六进制串转为二进制流data,其中十六进制串长度必须是偶数,否则返回类型错误。 **备注:Python2环境下,字符串默认存储是二进制流,即str=bytes,因此可以这样转换。Python3二者有区分,因此需要将str转为bytes** Python3.6 # -*-coding:utf-8-*- import binascii string = 'You are the best! Fighting!!!' # 先将str转为bytes,3种方法 string1= b'You are the best! Fighting!!!' string2 = bytes(string,encoding='utf-8') string3 = string.encode('utf-8') string_int1 = int(binascii.hexlify(string1),16) string_int2 = int(binascii.b2a_hex(string2),16) print (string_int1) print (string_int2) # LookupError: 'hex' is not a text encoding; use codecs.encode() to handle arbitrary codecs # 意思是字符串的没有'hex'编码形式,因此错误 #print (string.encode('hex')) #string_int3 = int(string.encode('hex'),16) int_string1 = binascii.unhexlify(hex(string_int1)[2:]) int_string2 = binascii.a2b_hex(hex(string_int1)[2:]) print (int_string1) print (int_string2) a = hex(string_int1) print (type(a)) #<class 'str'> 由于str没有decode属性,因此下面这个方法不能用 #int_string3 = hex(string_int1)[2:-1].decode('hex') 结果: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70 2] **参考:Python3环境下 str与bytes详解** [https://blog.csdn.net/lyb3b3b/article/details/74993327][https_blog.csdn.net_lyb3b3b_article_details_74993327] **第一种方法:** **使用str.encode()和bytes.decode()** (1)str转为bytes: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70 3] 即某种编码方式的字符串转为bytes类型,这里的编码可以指 >>> s = 'helloworld' >>> type(s) <class 'str'> >>> s.encode('utf-8') b'helloworld' >>> s.encode('ascii') b'helloworld' >>> a = '中文' >>> a.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87' >>> a.encode('gbk') b'\xd6\xd0\xce\xc4' >>> a.encode('gb2312') b'\xd6\xd0\xce\xc4' >>> a.encode('big5') b'\xa4\xa4\xa4\xe5' >>> (2)bytes转为str: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70 4] 即bytes类型以转化为某种编码方式的字符串,与str.encode()相反即可 >>> b2s = b.decode('utf-8') >>> type(b2s) <class 'str'> >>> b2s 'hello world' >>> **第二种方法:** **使用内置函数bytes()和str()** (1)str转为bytes ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70 5] **也就是说使用bytes()时必须指定字符串的编码方式,不然会报错** >>> a = '中文' >>> type(a) <class 'str'> >>> bytes(a,encoding='utf-8') b'\xe4\xb8\xad\xe6\x96\x87' >>> bytes(a,encoding='gbk') b'\xd6\xd0\xce\xc4' >>> bytes(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: string argument without an encoding >>> (2)bytes转为str ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70 6] 也就是说str()也要指定编码形式,这样就相当于bytes.decode(),将某种编码的字符串转为bytes类型。否则返回的是一个str对象 >>> b = bytes(a,encoding='utf-8') >>> b b'\xe4\xb8\xad\xe6\x96\x87' >>> str(b) "b'\\xe4\\xb8\\xad\\xe6\\x96\\x87'" >>> type(str(b)) <class 'str'> >>> str(b,encoding='utf-8') '中文' >>> [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70]: /images/20220503/f83947f7ea3d4766b2945db9c48ef254.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70 1]: /images/20220503/44d7bd41c5924ac7bdbdf819c8b6d981.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70 2]: /images/20220503/72fba118007042238992fc2c39f0e121.png [https_blog.csdn.net_lyb3b3b_article_details_74993327]: https://blog.csdn.net/lyb3b3b/article/details/74993327 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70 3]: /images/20220503/32f3620f052f46ea950d3e91c33792a0.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70 4]: /images/20220503/6e527b939033410d85a4f57219a34f5f.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70 5]: /images/20220503/20864a068e624654837ec5ead811430f.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1NzI3ODA5_size_16_color_FFFFFF_t_70 6]: /images/20220503/48abc9f67f694bd3a79a53a4cff5c995.png
还没有评论,来说两句吧...