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

文章图片
一、2/8/10/16进制互转
1.2/8/10/16进制赋值
文章图片
2.2/8/10/16进制互转
文章图片
二、数值和字符串互转
数值转字符串----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数据包的截图对这几个名词的定义进行约定 , 然后对各种转换的意思进行说明 。 
文章图片
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十六进制当大端模式还是小端模式处理 。 
文章图片
注意图中的b’x01y’其实就是b’x01x79’(y的ascii编码是十六进制的79)
2.2bin十六进制和byte互转实现
bin十六进制转byte主要在分析二进制文件、数据包头时获取mac地址、密钥等平时就以十六进制表示的值时使用;相反 , byte转bin十六进制就是在构造二进制文件、数据包头时写入mac地址、密钥等平时就以十六进制表示的值时使用 。
- 茅台|节后茅台市值蒸发6800亿!各种茅集体重挫,昔日绞肉机却暴涨一倍
- 气温回暖,各种蔬菜都开始种植,你知道哪些蔬菜是有毒的吗?
- 气温回暖,各种蔬菜都开始种植,什么菜种上以后,可以一直吃?
- 瑜伽裤不用什么花哨,各种场合都适用,很配你这个小仙女
- 跳马冠军桑兰:高位截瘫后以各种理由索赔,她真骗了全世界17年?
- 电影《缝纫机乐队》,这其中,有着百看不厌的各种伏笔和小细节
- 逾期后收到各种催收函是真的吗?还是催收的套路,一招分辨真假
- 黄埔发布先进制造业经营贡献突出企业名单!你所在的公司上榜没
- 这些英雄万金油,适用各种阵容,不是吗?
- 《锦心似玉》徐令宜各种花式讨好十一娘,只不过想要个体面而已
