파이썬에서 정수를 바이트 배열로 처리하려면 어떻게 해야 하나요?

파이썬 os.wait() 함수의 결과를 디코딩하려고 합니다. 파이썬 문서에 따르면 다음과 같이 반환됩니다:

16비트 숫자(낮은 바이트는 프로세스를 종료한 신호 번호, 높은 바이트는 종료 상태(신호 번호가 0인 경우))가 포함된 튜플; 코어 파일이 생성된 경우 낮은 바이트의 높은 비트가 설정됩니다.

종료 상태 표시(정수)를 디코딩하여 높은 바이트와 낮은 바이트를 얻으려면 어떻게 해야 하나요? 구체적으로 다음 코드 스니펫에서 사용되는 디코딩 함수를 어떻게 구현하나요?

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

일반 질문에 답변해 [약어입니다 조작] 를 사용할 수 있습니다 (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. 바스토프식 ()
해설 (0)
해결책

이렇게 하면 원하는 작업을 수행할 수 있습니다:

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

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


import struct
i = 3235830701  # 0xC0DEDBAD
s = struct.pack(">L", i)  # ">" = Big-endian, "
해설 (0)
exitstatus, signum= divmod(status, 256)
해설 (0)

비트 시프팅](http://docs.python.org/ref/shifting.html) 및 마스킹 연산자를 사용하여 상태의 압축을 풀 수 있습니다.

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

저는 파이썬 프로그래머가 아니기 때문에 구문이 정확했기를 바랍니다.

해설 (0)

저보다 앞선 사람들이 잘 해냈지만, 정말 한 줄로 정리하고 싶다면 이렇게 하면 됩니다:

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

편집 : 거꾸로했습니다.

해설 (0)
import amp as amp
import status
signum = status & 0xff
exitstatus = (status & 0xff00) >> 8
해설 (2)