Python各种进制之间的转换方法


Python各种进制之间的转换方法
文章图片
一、2/8/10/16进制互转
1.2/8/10/16进制赋值

Python各种进制之间的转换方法
文章图片
2.2/8/10/16进制互转

Python各种进制之间的转换方法
文章图片
二、数值和字符串互转
数值转字符串----str(num_var)
字符串转数值----int(str_var) 。 注意str_var只有全是数字字符(0-9)时才能转成功 , 如变量含有数字之外的字符(如abcd等)转换会报错:ValueError:invalidliteralforintwithbase10
三、字符串和byte互转
解码的本质是选择二进制对应的图形 , 编码的本质是把字符图形转成相应编码的二进制 。 这只是一种显示的变化 , 在内存上并不一定有变化 。
字符串转byte----str_var.encode
byte转字符串----byte_var.decode
四、网络数据包/二进制文件中的各种互转
分析一个网络数据包/二进制文件 , 基本进行的操作就是将bin十六进制转int、转byte、转str;而相反 , 构造一个网络数据包/二进制文件 , 要做的就是将int、将byte、将str转bin十六进制 。
1.概念定义
由于bin十六进制、int、byte、str这几个概念不是标准称呼(我也不懂标准称呼是什么) , 所以下边先用一张wireshark截获取一个http数据包的截图对这几个名词的定义进行约定 , 然后对各种转换的意思进行说明 。

Python各种进制之间的转换方法
文章图片
1.1bin十六进制/int/byte/str的定义
bin十六进制----图中b“x01x79”、b“x04xf9x38xadx13x26”等十六进制表示形式;每一位是4bit的十六进制数
int----就是正常的10进制整数 , 如图中TotalLenght的377等值
byte----b‘04f9381326’的形式;每一位是ascii编码的byte(8bit)
str----就是字符串 , 如图中的“HTTP”等
1.2bin十六进制和int/byte/str互转的定义
bin十六进制转int----将二进制文件中的b“x01x79”转为“377”的过程 。 本质上讲 , 就是把一个byte型十六进制数 , 转成十进制数的过程 。 (注意区别:int(0x178)时参数0x179是16进制整型而b’x01x79’是byte数组)
int转bin十六进制----将“377”转为二进制文件中的b“x01x79”的过程 。 本质上讲 , 就是把一个十进制数 , 转成byte型十六进制数的过程 。 (注意区别:hex(377)得到的0x179是16进制整型而b’x01x79’是byte数组)
bin十六进制转byte----将二进制文件中的b“x04xf9x38xadx13x26”取为b‘04f9381326’的过程 。 本质上讲 , 就是将每个十六进制数(4bit) , 转成一个采用ascii编码的byte(8bit)的过程 。
byte转bin十六进制----将b‘04f9381326’取为二进制文件中的b“x04xf9x38xadx13x26”的过程 。 本质上讲 , 就是将每个采用ascii编码的byte(8bit) , 转成一个十六进制数(4bit)的过程 。
bin十六进制转str----将二进制文件中b’x48x54x54x50’取为字符串‘HTTP’的过程 。 本质上讲 , 就是将ascii编码转成对应字符的过程 。
str转bin十六进制----将字符串‘HTTP’取为二进制文件中b’x48x54x54x50’的过程 。 本质上讲 , 字符转成就是对应的ascii编码的过程 。
2各种互转实现
2.1bin十六进制与int互转实现
bin十六进制转int主要在分析二进制文件、数据包头时获取长度等值时使用;相反 , int转bin十六进制就是在构造二进制文件、数据包头时写入长度等值时使用 。
另外注意把bin十六进制当数值时有大端和小端两种模式 , 大端意思是开头(低地址)权重大 , 小端为开头(低地址)权重小 。 文件系统一般用小端模式 , 网络传输一般用大端模式 。
int转bin十六进制----num_var.to_bytes(lenght,byteorder) , lenght表示转成的多少个字节;byteorder可为big或little分别表示转bin十六进制时使用大端模式还是小端模式 。
bin十六进制转int----int.from_bytes(byte_var,byteorder) , byte_var是要转成数值的变bin十六进制变量 , byteorder还是一样可为big或little , 分别表示从bin十六进制转为数值时把bin十六进制当大端模式还是小端模式处理 。

Python各种进制之间的转换方法
文章图片
注意图中的b’x01y’其实就是b’x01x79’(y的ascii编码是十六进制的79)
2.2bin十六进制和byte互转实现
bin十六进制转byte主要在分析二进制文件、数据包头时获取mac地址、密钥等平时就以十六进制表示的值时使用;相反 , byte转bin十六进制就是在构造二进制文件、数据包头时写入mac地址、密钥等平时就以十六进制表示的值时使用 。