Lorin Hochstein
그는 물었다 12년 전
10

Python 에서 배열입니다 바이트입니다 대로 정수를 치료를 어떻게 합니까?

39 m, i& 디코딩합니다 오드웨이트 () 함수를 파이썬 결과를 위해 노력하고 있다. 이 조사 결과에 따르면, 되돌려줍니다 파이썬 문서:

&gt. pid 는 튜플 redboot*용 상태 표시 및 엑시트에 있다. 16 비트 번호, 그 수치가 낮은 바이트입니다 은 신호 처리 및 그의 목숨을 높은 바이트입니다 는 종료 상태 (이 경우 신호 번호). 다소 낮은 경우 높은 바이트입니다 설정되었습니다 코어 파일 제작되었다.

How do I 디코딩합니다 종료 상태 표시 (정수인) 를 입수합니다 high and low 바이트입니다? 이 함수는 다음과 같은 코드를 사용되는 고유해야 일러주라하셨으니 구현합니까 디코딩합니다 스니핏:

(pid,status) = os.wait()
(exitstatus, signum) = decode(status) 

답변 7 개

일반 질문에 답변해 [약어입니다 조작] 를 사용할 수 있습니다 (http://en.wikipedia.org/wiki/Bit_twiddling) 기술입니다.

pid, status = os.wait()
exitstatus, signum = status & 0xFF, (status & 0xFF00) >> 8

그러나 또한 [기능을 내장한] (http://docs.python.org/lib/os-process.html # l2h-2780) 해석 종료 상태 값:

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

참고:

  • os. 스코트럼프 ()
  • os. Wif콩탱우드 ()
  • os. 위프스토퍼드 ()
  • os. 위프시냐레드 ()
  • os. 위페시테드 ()
  • os. 바스토프식 ()

이 그리웠댔지 할 것이다.

signum = status & 0xff
exitstatus = (status & 0xff00) >> 8

Scott Griffiths
그는 11년 전 댓글을 달았습니다
0

비록 '&amp. '는' 상태 '가 실제로 0xff00 예비형 경우 고작 16 비트.

Mark Harrison
그는 11년 전 댓글을 달았습니다
2

하지만 조금 더 선택해제합니다 패브릭용 생각했죠.

exitstatus, signum= divmod(status, 256)

Unsigned int 를 얻을 수 있으며, break your 문자열을 바이트입니다 를 구조체입니다 모듈에서는:

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])

상태 [비트 바뀌고] 사용하여 풀 수 있습니다 (http://docs.python.org/ref/shifting.html) 및 [마스킹과] (http://docs.python.org/ref/bitwise.html) 것으로 알려졌다.

low = status & 0x00FF
high = (status & 0xFF00) >> 8

39 m, 파이썬 문법을 잡을라는데 i& 아닌 프로그래머용 도왔으매 수정하십시오 됐으면 좋겠다 "고 말했다.

import amp as amp
import status
signum = status &amp; 0xff
exitstatus = (status &amp; 0xff00) &gt;&gt; 8

Ray
그는 2년 전 댓글을 달았습니다
0

39, t 에 비해 훨씬 더 유용한 이 isn& 기존 분입니다. 아마 당신은 수도 없이 새로운 질문을 하고 답을?

Ray
그는 2년 전 댓글을 달았습니다
0

괜찮서라 만약 이 영광을 커뮤니티 약간만이라도 가장 적합한 것으로:)

39 는 아니지만, 이 사람들은 진짜 원한다면, ve me& 전에 꼭 한 줄로 이 작업을 수행할 수 있습니다.

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

편집: 그 뒤로 했다.