python十进制转八进制_Python3各种进制之间的转换方法

一、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数据包的截图对这几个名词的定义进行约定,然后对各种转换的意思进行说明。

1116722-20180814095924197-151844513.png

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十六进制当大端模式还是小端模式处理。

1116722-20180814095049976-1800749938.png

注意图中的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)

1116722-20180814095434000-848561046.png

4.2.3 bin十六进制与str互转

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

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

1116722-20180814101648574-1781374813.png

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Python中的八转换十进制数,可以使用以下方法。首先,将八数的每一位数字乘以相应的权重,然后将它们相加。八数的权重是从右到左依次为 8^0,8^1,8^2,以此类推。下面是一个简单的Python代码示例,演示了如何实现这个转换过程: ```python def octal_to_decimal(octal): decimal = 0 power = 0 while octal != 0: last_digit = octal % 10 decimal += last_digit * (8 ** power) power += 1 octal //= 10 return decimal octal_number = 0o17 # 八数以0o开头表示 decimal_number = octal_to_decimal(octal_number) print(decimal_number) ``` 在这个示例中,我们定义了一个名为`octal_to_decimal`的函数来执行八十进制转换。函数接受一个八数作为参数,并返回对应的十进制数。我们使用一个循环来逐位计算并累加每个数字的权重乘积。最后,我们通过调用`octal_to_decimal`函数将八转换十进制数,并将结果打印出来。 希望这个示例能够帮助你理解如何在Python中将八转换十进制数。如果你有任何其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【Python 随练】八转换十进制](https://blog.csdn.net/qq_21484461/article/details/131525058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值