행복한 하루
[Python] 정수를 16진수(HEX)로 몇 가지 출력(표현)하는 방법 본문
안녕하세요.
시리얼(UART) 통신을 하다 보면 HEX(16진수) 데이터를 많이 보게 됩니다. 그런데 python에서 화면에 표시하려면 생각한 것처럼 예쁘게 나오지 않습니다. 그래서 간단하게 알고 있으면 좋을 내용이 있어서 적어보았습니다.
기본적으로 Hex라고 하면 0x00~ 0xFF로 표기가 됩니다. 그러나 0x를 뺄 수도 있고, 00 두 자리로 표시할 수도 있고 대문자로도 할 수 있고 정의하는 곳에 맞게 출력할 필요가 있습니다. 그래서 맞는 옵션을 찾아서 출력설정을 하면 도움이 될 거라고 생각됩니다. 그리고 MicroPython에서 바로 지원하지 않는 함수도 있을 수 있으니 개발 환경에서 작동하는지 확인이 필요해 보입니다.
1. 변환 함수로 10진수 -> 16진수(HEX) 변환
- hex(정수) 함수를 넣으면 Hex로 출력됩니다.
print("HEX print : ", hex(1), " ", hex(255))
2. format함수 이용
- format(정수, 형식)에서 형식에 x는 16진수 표시를 하는 것이고 2는 간격을 주는 것입니다. 만약 02를 넣어주면 빈칸에는 0이 입력됩니다. (참고로, o는 8진수, b는 2진수, #을 붙이면 접두어 포함)
print("HEX print : ", format(1, 'x'), " ", format(255, 'x') )
print("HEX print : ", format(1,'2x'), " ", format(255, '2x') )
print("HEX print : ", format(1,'02x'), " ", format(255, '02x') )
- 앞에 0x 표기가 빠져 있는데 여기에 #을 붙여주면 앞에 문자가 붙게 됩니다. 사용법 중 ‘X’에 보면 나와 있습니다. (다른 블로그 내용에는 #을 format specification mini language라고 합니다) 그런데 그렇게 되면 간격에 0을 붙이는 것이 작동하지 않는 것처럼 보일 수 있습니다. 그것이 아니라 0x로 인해 자릿수가 4개가 되는 것입니다. 4로 바꿔 주면 0의 자리도 포함되는 것을 알 수 있습니다. 그리고 x는 소문자로, X는 대문자로 표시해줍니다.
print("HEX print : ", format(1, '#02 x'), " ", format(255, '#02 x') )
print("HEX print : ", format(1, '#02 X'), " ", format(255, '#02 X') )
print("HEX print : ", format(1, '#04 x'), " ", format(255, '#04 x') )
print("HEX print : ", format(1, '#04 X'), " ", format(255, '#04 X') )
3. 문자열 포맷형태 이용
- 위의 내용과 크게 차이는 없지만, 문자열 중간에 넣어 사용할 때 편하게 사용할 수 있습니다. 위의 내용도 비슷하게는 가능합니다. 그런데 여기서 주의 깊게 봐야 하는 것이 동일한 두 문장 같지만, 아래의 예제에서 ex1는 f-string 문법으로 문자열 안에 함수도 넣을 수 있는 다른 기능의 문자열이 됩니다. 그래서 .format에 있는 인자가 들어가는 것이 아니라, {정수, 형식}으로 동작하는 것을 알 수 있습니다. f-string은 다른 내용이라 여기서는 넘어가도록 하겠습니다.
- ex2는 우리가 예상하는 문자열{인자인덱스:형태} 안에 .format(정수, 정수... ) 형태인 인자가 인덱스에 맞는 정수가 대입되는 것을 볼 수 있습니다.
print(f"HEX print : first - {0:#04x} end - {1:#04x}".format(2, 255)) #ex1 : f-string
print("HEX print : first - {0:#04x} end - {1:#04x}".format(2, 255)) #ex2
4. 간단하게 배열내용을 출력
- 정수값을 리스트 입력해서 아래와 같이 간단하게 출력해 볼 수 있습니다.
data = [1, 2, 3, 0xFF]
for c in data:
print("HEX :", "{0:#04X} {1:#04X}".format(c, 255) ,f"f-string : {c:#04X}")
- 필요에 맞게 원하는 형태로 HEX 값을 출력해서 사용하는데 도움이 되었으면 합니다.
감사합니다.
<참고 사이트>
1. 파이썬 format(), 16진수 변환, hex 값 변환
https://cyber0946.tistory.com/76
2. Python Int to Hex | String Formatting
https://blog.finxter.com/python-int-to-hex-string-formatting/
3. string — Common string operations
https://docs.python.org/3/library/string.html
4. 파이썬의 f-string으로 문자열 포맷팅하기
https://www.daleseo.com/python-f-strings/
'Programming > Python' 카테고리의 다른 글
[MicroPython] async 함수에서 return(result) 값 받는 방법 (0) | 2023.05.24 |
---|