牛骨文教育服务平台(让学习变的简单)
博文笔记

python常用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)

创建时间:2015-08-19 投稿人: 浏览次数:964

hbase python 客户端使用中的坑----

进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等

废话不多上,直接上例子


整数之间的进制转换:

  • 10进制转16进制: hex(16)  ==>  0x10
  • 16进制转10进制: int("0x10", 16)  ==>  16
类似的还有oct(), bin()


-------------------


字符串转整数:
  • 10进制字符串: int("10")  ==>  10
  • 16进制字符串: int("10", 16)  ==>  16
  • 16进制字符串: int("0x10", 16)  ==>  16


-------------------


字节串转整数:
  • 转义为short型整数: struct.unpack("<hh", bytes(b"x01x00x00x00"))  ==>  (1, 0)
  • 转义为long型整数: struct.unpack("<L", bytes(b"x01x00x00x00"))  ==>  (1,)


-------------------


整数转字节串:
  • 转为两个字节: struct.pack("<HH", 1,2)  ==>  b"x01x00x02x00"
  • 转为四个字节: struct.pack("<LL", 1,2)  ==>  b"x01x00x00x00x02x00x00x00"


-------------------


字符串转字节串:
  • 字符串编码为字节码: "12abc".encode("ascii")  ==>  b"12abc"
  • 数字或字符数组: bytes([1,2, ord("1"),ord("2")])  ==>  b"x01x0212"
  • 16进制字符串: bytes().fromhex("010210")  ==>  b"x01x02x10"
  • 16进制字符串: bytes(map(ord, "x01x02x31x32"))  ==>  b"x01x0212"
  • 16进制数组: bytes([0x01,0x02,0x31,0x32])  ==>  b"x01x0212"


-------------------


字节串转字符串:
  • 字节码解码为字符串: bytes(b"x31x32x61x62").decode("ascii")  ==>  12ab
  • 字节串转16进制表示,夹带ascii: str(bytes(b"x01x0212"))[2:-1]  ==>  x01x0212
  • 字节串转16进制表示,固定两个字符表示: str(binascii.b2a_hex(b"x01x0212"))[2:-1]  ==>  01023132
  • 字节串转16进制数组: [hex(x) for x in bytes(b"x01x0212")]  ==>  ["0x1", "0x2", "0x31", "0x32"]


===================


测试用的python源码

[python] view plaincopy
  1. """"" 
  2. Created on 2014年8月21日 
  3.  
  4. @author: lenovo 
  5. """  
  6. import binascii  
  7. import struct  
  8.   
  9.   
  10. def example(express, result=None):  
  11.     if result == None:  
  12.         result = eval(express)  
  13.     print(express, " ==> ", result)  
  14.   
  15.   
  16. if __name__ == "__main__":  
  17.       
  18.     print("整数之间的进制转换:")  
  19.     print("10进制转16进制", end=": ");example("hex(16)")  
  20.     print("16进制转10进制", end=": ");example("int("0x10", 16)")  
  21.     print("类似的还有oct(), bin()")  
  22.       
  23.     print(" ------------------- ")  
  24.       
  25.     print("字符串转整数:")  
  26.     print("10进制字符串", end=": ");example("int("10")")  
  27.     print("16进制字符串", end=": ");example("int("10", 16)")  
  28.     print("16进制字符串", end=": ");example("int("0x10", 16)")  
  29.       
  30.     print(" ------------------- ")  
  31.       
  32.     print("字节串转整数:")  
  33.     print("转义为short型整数", end=": ");example(r"struct.unpack("<hh", bytes(b"x01x00x00x00"))")  
  34.     print("转义为long型整数", end=": ");example(r"struct.unpack("<L", bytes(b"x01x00x00x00"))")  
  35.   
  36.     print(" ------------------- ")  
  37.   
  38.     print("整数转字节串:")  
  39.     print("转为两个字节", end=": ");example("struct.pack("<HH", 1,2)")  
  40.     print("转为四个字节", end=": ");example("struct.pack("<LL", 1,2)")  
  41.       
  42.     print(" ------------------- ")  
  43.       
  44.     print("字符串转字节串:")  
  45.     print("字符串编码为字节码", end=": ");example(r""12abc".encode("ascii")")  
  46.     print("数字或字符数组", end=": ");example(r"bytes([1,2, ord("1"),ord("2")])")  
  47.     print("16进制字符串", end=": ");example(r"bytes().fromhex("010210")")  
  48.     print("16进制字符串", end=": ");example(r"bytes(map(ord, "x01x02x31x32"))")  
  49.     print("16进制数组", end =": ");example(r"bytes([0x01,0x02,0x31,0x32])")  
  50.       
  51.     print(" ------------------- ")  
  52.       
  53.     print("字节串转字符串:")  
  54.     print("字节码解码为字符串", end=": ");example(r"bytes(b"x31x32x61x62").decode("ascii")")  
  55.     print("字节串转16进制表示,夹带ascii", end=": ");example(r"str(bytes(b"x01x0212"))[2:-1]")  
  56.     print("字节串转16进制表示,固定两个字符表示", end=": ");example(r"str(binascii.b2a_hex(b"x01x0212"))[2:-1]")  
  57.     print("字节串转16进制数组", end=": ");example(r"[hex(x) for x in bytes(b"x01x0212")]")  
  58.       
  59.       
  60.     print(" =================== ")  
  61.     print("以上原理都比较简单,看一下就明白了。这里仅仅是抛砖引玉,有更好更简单的方法,欢迎欢迎")  

以上原理都比较简单,看一下就明白了。这里仅仅是抛砖引玉,有更好更简单的方法,欢迎欢迎
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。