为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Python中将整数视为字节数组?

如何在Python中将整数视为字节数组?

白板的微信 2021-03-21 12:13:21
我正在尝试解码Python os.wait()函数的结果。根据Python文档,这将返回:一个包含其pid和退出状态指示的元组:一个16位数字,其低字节是杀死该进程的信号号,其高字节是退出状态(如果信号号为零);如果生成了核心文件,则设置低字节的高位。如何解码退出状态指示(整数)以获得高字节和低字节?具体来说,如何实现以下代码段中使用的解码功能:(pid,status) = os.wait()(exitstatus, signum) = decode(status) 
查看完整描述

3 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

这将做您想要的:


signum = status & 0xff

exitstatus = (status & 0xff00) >> 8


查看完整回答
反对 回复 2021-03-22
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

要回答您的一般问题,您可以使用位操作


pid, status = os.wait()

exitstatus, signum = status & 0xFF, (status & 0xFF00) >> 8

但是,还有内置函数可用于解释退出状态值:


pid, status = os.wait()

exitstatus, signum = os.WEXITSTATUS( status ), os.WTERMSIG( status )

也可以看看:


os.WCOREDUMP()

os.WIFCONTINUED()

os.WIFSTOPPED()

os.WIFSIGNALED()

os.WIFEXITED()

os.WSTOPSIG()


查看完整回答
反对 回复 2021-03-22
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您可以使用struct模块将int分解为无符号字节的字符串:


import struct

i = 3235830701  # 0xC0DEDBAD

s = struct.pack(">L", i)  # ">" = Big-endian, "<" = Little-endian

print s         # '\xc0\xde\xdb\xad'

print s[0]      # '\xc0'

print ord(s[0]) # 192 (which is 0xC0)

如果将其与数组模块结合使用,则可以更方便地执行此操作:


import struct

i = 3235830701  # 0xC0DEDBAD

s = struct.pack(">L", i)  # ">" = Big-endian, "<" = Little-endian


import array

a = array.array("B")  # B: Unsigned bytes

a.fromstring(s)

print a   # array('B', [192, 222, 219, 173])


查看完整回答
反对 回复 2021-03-22
  • 3 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号