Discuss / Python / [捂脸]请问下大佬们,这个如何理解

[捂脸]请问下大佬们,这个如何理解

Topic source

greatzues

#1 Created at ... [Delete] [Delete and Lock User]
>>> n = 10240099
>>> b1 = (n & 0xff000000) >> 24
>>> b2 = (n & 0xff0000) >> 16
>>> b3 = (n & 0xff00) >> 8
>>> b4 = n & 0xff
>>> bs = bytes([b1, b2, b3, b4])
>>> bs
b'\x00\x9c@c'

为什么可以这样构造出b'\x00\x9c@c'?主要不解的是类似这句(n & 0xff000000) >> 24要如何理解?

greatzues

#2 Created at ... [Delete] [Delete and Lock User]

没有大佬解答,我只能尝试自己理解了!大牛勿喷,我的思路是这样的:

>>> n = 10240099
>>> b1 = (n & 0xff000000) >> 24
# &是与函数,n & 0xff000000等于0,右移24位变成0,即过滤出32位的24-32位的数
# 其二进制是 00000000 00000000 00000000 00000000

>>> b2 = (n & 0xff0000) >> 16
# 同理,n & 0xff0000等于10223616,右移16位变成156,即过滤出16-24位的数,
# 其二进制是(00000000) 10011100 00000000 00000000 

>>> b3 = (n & 0xff00) >> 8
# n & 0xff00等于16384,右移后变成64,即  (00000000 00000000) 01000000 00000000

>>> b4 = n & 0xff
# 你& 0xff等于99,即  (00000000 00000000 00000000) 01100011

>>> bs = bytes([b1, b2, b3, b4])
#将过滤出的数相加传入bytes,
# 若单纯相加得到10240099转成二进制后的数00000000 10011100 01000000 01100011

>>> bs
b'\x00\x9c@c #获得二进制转换为字节之后的bytes

虽然中间的逻辑是有点明白了,但具体的目的还是不清楚,为什么要把整数(二进制)转为bytes?


  • 1

Reply