gpt4 book ai didi

python - 使用十六进制值操作不适用于十六进制函数

转载 作者:太空宇宙 更新时间:2023-11-04 10:27:54 26 4
gpt4 key购买 nike

1) 我在处理十六进制值时遇到了一点问题。为什么 sendValue(hex(12289)) 导致错误(中止脚本),而 sendValue(0x3001) 有效?

def sendValue(value):
for i in range(16):
if (value & 0x8000):
print "1" # later this bit will be sent to a LC
else:
print "0" # later this bit will be sent to a LC
value <<= 1 # corrected this

def main():
sendValue(0x3001)
sendValue(hex(12289))

if __name__ == '__main__':
main()

2) 我期待输出

0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
1

但我只得到0

最佳答案

您的 sendValue() 函数只打印数字的最高有效位 16 次。您需要扫描每个位。例如,

#!/usr/bin/env python

def sendValue(value):
print hex(value),

for i in range(16):
if (value & 0x8000):
print "1",
else:
print "0",

#Right-shift value to put next bit into the MSB position
value <<= 1

print


def main():
sendValue(0x3001)
sendValue(12289)
sendValue(0x123f)


if __name__ == '__main__':
main()

**output**

0x3001 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1
0x3001 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1
0x123f 0 0 0 1 0 0 1 0 0 0 1 1 1 1 1 1

请注意,Python 有一个内置的 bin() 函数可以将整数转换为位串:

>>> bin(0x3001)
'0b11000000000001'
>>> bin(0xfed)
'0b111111101101'

但如果您出于某种原因不想使用 bin(),还有其他方法可以做到这一点,它们比我之前的代码更紧凑。例如,将 value 向左移动并用 & 1 屏蔽它,如下所示:

def sendValue(value):
print hex(value),
print ' '.join([str(value >> i & 1) for i in range(16, -1, -1)])

关于python - 使用十六进制值操作不适用于十六进制函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28405849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com