프로그래밍/Python

[python] struct.error: char format requires a bytes object of length 1

채윤아빠 2024. 6. 22. 22:37
728x90
반응형

문제점 및 증상

struct.pack() 함수를 bytes 데이터 생성 중, "c"로 한 문자를 입력받아 처리하는 과정에서 다음과 같은 오류가 발생하였습니다.

pack('>c', 'C')
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in 
    pack('>c', 'C')
struct.error: char format requires a bytes object of length 1

문제 분석

파이썬 2.x 버전에서는 "pack('>c', 'C')"와 같은 코드가 문제가 없었으나, 3.x 버전으로 올라오면서 동일한 문장에 대하여 "struct.error: char format requires a bytes object of length 1" 오류가 발생합니다.

다음과 같은 형식으로 넣으려 해도 모두 동일한 오류가 발생합니다.

pack('>c', 'A')
pack('>c', 'ABC'[1])
pack('>c', 65)
pack('>c', hex(65))

해결 방법

다음과 같이 문자열 (str)이 아닌 bytes 에서 1개 항목값을 전달해 주어야만 합니다.

"c" 문자에 대하여 다음과 같은 형식으로 값을 전달해 주어야만 합니다.

pack('>c', b'A')
pack('>c', b'ABC'[0:1])
pack('>c', 'A'.encode('utf-8'))
pack('>c', bytes('A', 'utf-8'))