bytes 결과를 좀 편하게 보자

시리얼 통신으로 자료를 주고 받는 것은 bytes를 보통 이용한다. 주피터랩의 문제인지 이 결과가 바뀌다 만 16진법으로 표현되는데 이러면 도대체 이게 무슨 결과인지 확인하는 것이 어렵다. 그래서 찾아보았다.

우선 \x10 과 같은 형식으로 자료가 오는 것을 int 값으로 변환시킨다. 이 장비는 다행스럽게도 빅 엔디안 형식을 취하고 있다.

int.from_bytes(i, byteorder="big")

이렇게 하면 이제 그나마 직관적인 정수 형태로 결과를 볼 수 있다. 이제 이 것을 0x10의 형태로 바꾸어 본다. ‘#04x’ 에 어떤 것을 입력하느냐에 따라 형식이 바뀐다고 한다. 내가 필요한 형식에 맞추어서 설정해 두었다.

format(value, '#04x')

통상적으로 한 줄에 16개의 자료를 출력한다. 대세의 흐름에 맞추어 나도 그렇게 해본다. 이 통신에서 EOF 문자는 0xc1 이기 때문에. 중간에 EOF가 나타나면 줄 바꿈을 넣는다. 함수로 다음과 같이 설정해 보았다.

def msg_print(line):
    i = 0
    for value in line:
        print(format(value, '#04x'), end=' ')
        if i % 16 == 15: 
            print()
        i += 1
        if value == 0xc1: 
            print()
            i = 0