"binascii" --- 바이너리와 ASCII 간의 변환
*****************************************

======================================================================

"binascii" 모듈에는 바이너리와 다양한 ASCII 인코딩 바이너리 표현 사이
를 변환하는 여러 가지 방법이 포함되어 있습니다. 일반적으로 이러한 함수
는 직접 사용하지 않고, 대신 "base64"와 같은 래퍼 모듈을 사용합니다.
"binascii" 모듈에는 고수준 모듈에서 사용하는 보다 빠른 속도를 위해 C로
작성된 저수준 함수가 들어 있습니다.

참고:

  "a2b_*" 함수는 ASCII 문자만 포함하는 유니코드 문자열을 받아들입니다.
  다른 함수는 *바이트열류 객체*(가령 "bytes", "bytearray" 및 버퍼 프로
  토콜을 지원하는 다른 객체)만 받아들입니다.

  버전 3.3에서 변경: ASCII로만 이루어진 유니코드 문자열은 이제 "a2b_*"
  함수에서 허용됩니다.

"binascii" 모듈은 다음 함수를 정의합니다:

binascii.a2b_uu(string)

   한 줄의 UU 인코딩된 데이터 string을 바이너리로 역변환하고 바이너리
   데이터를 반환합니다. 마지막 줄을 제외하고는, 줄은 보통 45 (바이너리
   ) 바이트를 포함합니다. 줄 데이터 뒤에는 공백 문자가 올 수 있습니다.

binascii.b2a_uu(data, *, backtick=False)

   바이너리 data를 ASCII 문자의 줄로 변환합니다, 반환 값은 개행 문자를
   포함하는 변환 된 줄입니다. *data*의 길이는 최대 45이어야 합니다.
   *backtick*가 참이면, 0은 스페이스 대신 "'`'"으로 표현됩니다.

   버전 3.7에서 변경: *backtick* 매개 변수가 추가되었습니다.

binascii.a2b_base64(string, /, *, strict_mode=False)

   base64 데이터 블록을 바이너리로 역변환하고 바이너리 데이터를 반환합
   니다. 한 번에 한 줄 이상을 전달할 수 있습니다.

   If *strict_mode* is true, only valid base64 data will be converted.
   Invalid base64 data will raise "binascii.Error".

   Valid base64:

   * Conforms to **RFC 3548**.

   * Contains only characters from the base64 alphabet.

   * Contains no excess data after padding (including excess padding,
     newlines, etc.).

   * Does not start with a padding.

   버전 3.11에서 변경: *strict_mode* 매개 변수가 추가되었습니다.

binascii.b2a_base64(data, *, newline=True)

   바이너리 data를 base64 코딩으로 ASCII 문자의 줄로 변환합니다. 반환
   값은 변환된 줄인데, *newline*이 참이면, 개행 문자를 포함합니다. 이
   함수의 출력은 **RFC 3548**을 따릅니다.

   버전 3.6에서 변경: *newline* 매개 변수가 추가되었습니다.

binascii.a2b_qp(data, header=False)

   quoted-printable data 블록을 바이너리로 역변환하고 바이너리 데이터
   를 반환합니다. 한 번에 한 줄 이상을 전달할 수 있습니다. 선택적 인자
   *header*가 있고 참이면, 밑줄(underscore)은 스페이스로 디코딩됩니다.

binascii.b2a_qp(data, quotetabs=False, istext=True, header=False)

   바이너리 data를 quoted-printable 인코딩으로 ASCII 문자의 줄로 변환
   합니다. 반환 값은 변환된 줄입니다. 선택적 인자 *quotetabs*가 있고
   참이면, 모든 탭과 스페이스가 인코딩됩니다. 선택적 인자 *istext*가
   있고 참이면, 개행 문자는 인코딩되지 않지만, 후행 공백은 인코딩됩니
   다. 선택적 인자 *header*가 있고 참이면, 스페이스는 **RFC 1522**에
   따라 밑줄로 인코딩됩니다. 선택적 인자 *header*가 있고 거짓이면, 개
   행 문자도 함께 인코딩됩니다; 그렇지 않으면 라인 피드(linefeed) 변환
   이 바이너리 데이터 스트림을 손상할 수 있습니다.

binascii.crc_hqx(data, value)

   초기 CRC *value*로 시작하는, *data*의 16비트 CRC 값을 계산하고 결과
   를 반환합니다. 종종 0x1021로 표시되는, CRC-CCITT 다항식 *x*^16 +
   *x*^12 + *x*^5 + 1을 사용합니다. 이 CRC는 binhex4 형식에서 사용됩니
   다.

binascii.crc32(data[, value])

   초기 CRC *value*로 시작하는, *data*의 부호 없는 32비트 체크섬인
   CRC-32를 계산합니다. 기본 초기 CRC는 0입니다. 이 알고리즘은 ZIP 파
   일 체크섬과 일치합니다. 이 알고리즘은 체크섬 알고리즘으로 사용하도
   록 설계되었으므로, 일반 해시 알고리즘으로 사용하기에 적합하지 않습
   니다. 다음과 같이 사용하십시오:

      print(binascii.crc32(b"hello world"))
      # 또는, 두 조각으로:
      crc = binascii.crc32(b"hello")
      crc = binascii.crc32(b" world", crc)
      print('crc32 = {:#010x}'.format(crc))

   버전 3.0에서 변경: The result is always unsigned.

binascii.b2a_hex(data[, sep[, bytes_per_sep=1]])
binascii.hexlify(data[, sep[, bytes_per_sep=1]])

   바이너리 *data*의 16진수 표현을 반환합니다. *data*의 모든 바이트는
   해당 2자리 16진수 표현으로 변환됩니다. 따라서 반환된 바이트열 객체
   의 길이는 *data* 의 두 배입니다.

   비슷한 기능(하지만 텍스트 문자열을 반환하는)을 "bytes.hex()" 메서드
   를 사용하여 편리하게 액세스할 수도 있습니다.

   *sep*이 지정되면, 단일 문자 문자열이나 바이트열 객체여야 합니다.
   *bytes_per_sep* 입력 바이트마다 출력에 삽입됩니다. 구분자 배치는 기
   본적으로 출력의 오른쪽 끝에서부터 계산됩니다. 왼쪽부터 계산하려면,
   음수의 *bytes_per_sep* 값을 제공하십시오.

   >>> import binascii
   >>> binascii.b2a_hex(b'\xb9\x01\xef')
   b'b901ef'
   >>> binascii.hexlify(b'\xb9\x01\xef', '-')
   b'b9-01-ef'
   >>> binascii.b2a_hex(b'\xb9\x01\xef', b'_', 2)
   b'b9_01ef'
   >>> binascii.b2a_hex(b'\xb9\x01\xef', b' ', -2)
   b'b901 ef'

   버전 3.8에서 변경: *sep*과 *bytes_per_sep* 매개 변수가 추가되었습니
   다.

binascii.a2b_hex(hexstr)
binascii.unhexlify(hexstr)

   16진수 문자열 *hexstr*로 표현된 바이너리 데이터를 반환합니다. 이 함
   수는 "b2a_hex()"의 역함수입니다. *hexstr*는 짝수개의 16진수(대소문
   자 모두 가능합니다)를 포함해야 하며, 그렇지 않으면 "Error" 예외가
   발생합니다.

   비슷한 기능(텍스트 문자열 인자만 받아들이지만, 공백에 대해 더 느슨
   한)을 "bytes.fromhex()" 클래스 메서드를 사용하여 액세스할 수도 있습
   니다.

exception binascii.Error

   에러 시 발생하는 예외. 이들은 대개 프로그래밍 에러입니다.

exception binascii.Incomplete

   불완전한 데이터에서 발생하는 예외. 이들은 일반적으로 프로그래밍 에
   러가 아니지만, 조금 더 많은 데이터를 읽고 다시 시도하면 처리될 수
   있습니다.

더 보기:

  모듈 "base64"
     RFC 호환 base64 스타일 인코딩으로, 베이스 16, 32, 64 및 85를 지원
     합니다.

  모듈 "quopri"
     MIME 전자 우편 메시지에 사용되는 quoted-printable 인코딩 지원.
