저는 파이썬에 익숙하지 않고 임베디드 관련 작업을하고 있습니다 (대부분의 프로그래밍 경험은 C를 사용하고 있습니다).파이썬에서 Bytearray의 바이트를 어떻게 재정렬합니까?
직렬 포트에서 bytearray로 4 바이트 플로트를 읽고 있지만 보통의 리틀 엔디 언 주문 DCBA 대신 CDAB로 인코딩됩니다. 또는 BADC로 인코딩 될 수 있습니다. (여기서 A는 최상위 바이트이고 D는 LSB 임). bytearray에서 바이트를 바꿔 쓰는 올바른 방법은 무엇입니까?
예를 들어, 나는
tmp=bytearray(pack("f",3.14))
내가 다시 플로트로)을 임의의 tmp에 바이트를 마련하고 (압축 해제 할 수 있도록하려는있다.
임베디드 시스템과 관련된 모든 작업을 수행 할 때 필수적인 것처럼 보이지만 잘못되거나 확실하지 않은 대답이 있습니다 (아직!).
편집 : - CONCATENATE 다시 내가 슬라이스와 수 있도록하고 싶습니다, 이상적으로 ...
을
from struct import *
def modswap(num):
tmp=bytearray(pack("f",num))
res=bytearray()
res.append(tmp[2])
res.append(tmp[3])
res.append(tmp[0])
res.append(tmp[1])
return unpack('f',res)
def main():
print(modswap(3.14))
을하지만, 더 나은 방법이 있어야한다 : 확실히,이 작업을 수행 할 수 있습니다 나는 제발, 또는 가능한 한 한 번에 슬라이스를 교체하십시오.
네,하지만 임의로에 다시 순서 바이트를 원하는. 내 질문은 엔디안에 관한 것이 아닙니다. 여기서 특정 어플리케이션은 데이터를 한 번에 2 바이트 만 저장하는 Modbus 장치에서 데이터를 가져 오는 것이며 저장되는 데이터와 관련하여 2 바이트 단어의 순서는 지정되지 않으며 사용자가 구성 할 수 있어야합니다. 빅 엔디안이 ABCD이고 리틀 엔디안이 DCBA 인 경우 CDAB 및 BADC와 같은 사례를 처리하는 적절한 방법을 묻습니다. – Dmitri
실제 원시 데이터 예제와 결과를 원하는 데 도움이됩니다. –
고마워요! 나는 그것을 무엇이라고 부르는 지 궁금해서, swizzling은 완벽한 단어 xD처럼 보인다. – Dmitri