一、2/8/10/16进制互转

1.1 2/8/10/16进制赋值

# 二进制赋值以0b打头
a = 0b1000
# 八进制赋值以0o打头,第一个是数字0第二个是字母o
b = 0o1100
# 十进制不需要特别标明
c = 1110
# 十六进制赋值以0x打头
d = 0x1111

1.2 2/8/10/16进制互转

其他进制转二进制----bin(var)

其他进制转八进制----oct(var)

其他进制转十进制----int(var),其实不管赋值时用什么进制默认输出都是十进制,所以可以不需要转换

其他进制转十进制----hex(var)

二、数值和字符串互转

数值转字符串----str(num_var)

字符串转数值----int(str_var)。注意str_var只有全是数字字符(0-9)时才能转成功,如变量含有数字之外的字符(如abcd等)转换会报错:ValueError: invalid literal for int() with base 10

三、字符串和byte互转

字符串转byte----str_var.encode()

byte转字符串----byte_var.decode()

四、网络数据包/二进制文件中的各种互转

分析一个网络数据包/二进制文件,基本进行的操作就是将bin十六进制转int、转byte、转str;而相反,构造一个网络数据包/二进制文件,要做的就是将int、将byte、将str转bin十六进制。

4.1 概念定义

由于bin十六进制、int、byte、str这几个概念不是标准称呼(我也不懂标准称呼是什么),所以下边先用一张wireshark截获取一个http数据包的截图对这几个名词的定义进行约定,然后对各种转换的意思进行说明。

4.1.1 bin十六进制/int/byte/str的定义

bin十六进制----图中b“\x01\x79”、b“\x04\xf9\x38\xad\x13\x26”等十六进制表示形式;每一位是4bit的十六进制数

int----就是正常的10进制整数,如图中Total Lenght的377等值

byte----b‘04f9381326’的形式;每一位是ascii编码的byte(8bit)

str----就是字符串,如图中的“HTTP”等

4.1.2 bin十六进制和int/byte/str互转的定义

bin十六进制转int----将二进制文件中的b“\x01\x79”转为“377”的过程。本质上讲,就是把一个byte型十六进制数,转成十进制数的过程。(注意区别:int(0x178)时参数0x179是16进制整型而b'\x01\x79'是byte数组)

int转bin十六进制----将“377”转为二进制文件中的b“\x01\x79”的过程。本质上讲,就是把一个十进制数,转成byte型十六进制数的过程。(注意区别:hex(377)得到的0x179是16进制整型而b'\x01\x79'是byte数组)

bin十六进制转byte----将二进制文件中的b“\x04\xf9\x38\xad\x13\x26”取为b‘04f9381326’的过程。本质上讲,就是将每个十六进制数(4bit),转成一个采用ascii编码的byte(8bit)的过程。

byte转bin十六进制----将b‘04f9381326’取为二进制文件中的b“\x04\xf9\x38\xad\x13\x26”的过程。本质上讲,就是将每个采用ascii编码的byte(8bit),转成一个十六进制数(4bit)的过程。

bin十六进制转str----将二进制文件中b'\x48\x54\x54\x50'取为字符串‘HTTP’的过程。本质上讲,就是将ascii编码转成对应字符的过程。

str转bin十六进制----将字符串‘HTTP’取为二进制文件中b'\x48\x54\x54\x50'的过程。本质上讲,字符转成就是对应的ascii编码的过程。

4.2 各种互转实现

4.2.1 bin十六进制与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'\x01\x79'(y的ascii编码是十六进制的79)

4.2.2 bin十六进制和byte互转实现

bin十六进制转byte主要在分析二进制文件、数据包头时获取mac地址、密钥等平时就以十六进制表示的值时使用;相反,byte转bin十六进制就是在构造二进制文件、数据包头时写入mac地址、密钥等平时就以十六进制表示的值时使用。

bin十六进制转byte----binascii.b2a_hex(bin_var),bin_var为byte变量常从二进制文件中读出; 如binascii.b2a_hex(b'\x04\xf9\x38\xad\x13\x26')结果为b’04f9381326‘

byte转bin十六进制----binascii.a2b_hex(hex_byte_var),hex_byte_var为十六进制字节串; 如binascii.a2b_hex(b'04f9381326')结果为b'\x04\xf98\x13&'(8对应的ascii编码是38,&对应的ascii编码是26)

4.2.3 bin十六进制与str互转

bin十六进制转主要在分析二进制文件、数据包头时获取其量的字符串时使用;相反,byte转bin十六进制就是在构造二进制文件、数据包头时写入字符串时使用。

bin十六进制与str互转其实就是上边第三大点中的字符串和byte互转;此处的bin十六进制就是上边第三大点中的byte的本质。(b'\x48\x54\x54\x50'和b'HTTP'在内存中是一模一样的)

参考:

http://www.runoob.com/python3/python3-conversion-binary-octal-hexadecimal.html

https://docs.python.org/3/library/binascii.html

Python3各种进制之间的转换方法的更多相关文章

  1. PHP中进制之间的互相转换

    常见的进制: 二进制   binary   ----->  bin 八进制   octal     ----->  oct 十进制   decimal ----->  dec 十六进 ...

  2. python中的2、8、16、10进制之间的转换

    python除法的坑 众所周知,python除法有两个运算符,一个是/,还有一个是//,那么这两个有什么不同之处呢? 从图片可以得知,使用//返回一个float类型,而使用/返回一个int类型.我们总 ...

  3. JavaScript中进制之间的转换

    JavaScript中进制之间的转换 //十进制转其他 var x = 100; alert(x); alert(x.toString(2)); //转2进制 alert(x.toString(8)) ...

  4. bgcolor RGB 和16进制之间的转换,16进制转RGB,源码

    <p>bgcolor RGB 和16进制之间的转换,16进制转RGB,源码例如:<br /> 输入 201,255,201 转换成 #C9FFC9</p> < ...

  5. matlab学习笔记10_6 字符串与数值间的转换以及进制之间的转换

    一起来学matlab-matlab学习笔记10 10_6 字符串与数值间的转换以及进制之间的转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合 ...

  6. js中数值各进制之间的转换

    十进制转换为二进制 toString()方法可把一个 Number 对象转换为一个字符串,并返回结果.语法如下: NumberObject.toString(radix); 其中,radix为可选.规 ...

  7. 进制之间转换——day_01

    一.计算机文件大小单位 b = bit 位(比特) B = Byte 字节 1B = 8b #一个字节等于8位 简写 1Byte = 8 bit 1KB = 1024B 1MB = 1024KB 1G ...

  8. java------常见的进制、不同进制在代码中的表现形式、进制之间的转化、分辨率、三原色、计算机的存储规则

    常见的进制: 常见的进制:二进制.八进制.十进制.十六进制 不同进制在代码中的表现形式: 进制之间的转化: 二进制转十进制: 普通方法: 快捷方法: 八进制转十进制: 十六进制转十进制: 总结: 分辨 ...

  9. Java基础知识强化106:Java中 int 的各进制之间的转换

    1.二.八.十.十六进制之间的转换  下面是示例代码,我们直接通过JDK工具库中的方法实现的,如下: public static Integer valueOf(String s, int radix ...

随机推荐

  1. Python 安装 lxml 插件

    1.下载 lxml 地址:https://pypi.python.org/pypi/lxml/3.8.0#downloads 我用的是python 3.6,我下载了  lxml-3.8.0-cp36- ...

  2. Intellij idea创建maven项目并配置tomcat

    今天刷知乎的时候刷到这么一句话 我觉得还是蛮有趣的,形容的也比较到位,正好最近新建maven项目进行了thrift数据的传输,在此做一个记录 首先idea整合了maven,不需要单独下载 新建一个Pr ...

  3. 安装logstash和logstash-input-jdbc

    一.安装logstash 1.mac 下直接 brew install logstash 二.安装logstash-input-jdbc 直接在logstash的安装目录bin下运行 ./logsta ...

  4. HTML标记 2 ——表格

    <table width="800" border="0">     -----------------------表开头 <tr>   ...

  5. MySQL学习(十一)

    MySQL的函数 1 数学函数 2 字符串函数 3 日期和时间函数 4 条件判断函数 5 系统信息函数 6 加密解密函数 7 其他函数 2 字符串函数 length计算的是字节长度 char_leng ...

  6. nRF52832的SAADC

    SAADC部分思维导图 1ADC原理 1.1主要特点 1)8/10/12分辨率,使用过采样可达到14位分辨率 2)多达8个通道 单端输入时使用1个通道,2个通道可组成差分输入 单端和差分输入时均可配置 ...

  7. Http File Server小工具

    一般情况下,在做一些测试(比如下载服务)的时候需要提供一个http文件下载服务. 下面这个轻量级的工具HFS可以在本地提供http服务: 官网地址传送门:Http File Server

  8. AtCoder Grand Contest 027 C ABland Yard

    ABland Yard 思路: 用了类似拓扑排序的方法来判环 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optim ...

  9. Codeforces 934C - A Twisty Movement

    934C - A Twisty Movement 思路:dp 很容易想到要预处理出1的前缀和pre[i]和2的后缀和suf[i] 然后枚举区间,对于每个区间如果能求出最长递减序列的长度,那么就能更新答 ...

  10. Jmeter 接口测试知识梳理——持续集成篇

    Jmeter 使用也有很长时间了,但是一直没有做一下知识梳理,近期会对公司同事做一下这方面的培训,借此机会,把使用过程中应用到的知识,或是遇到的问题,整理出来,方便大家学习! Jmeter + Ant ...