web-dev-qa-db-ja.com

py3kでバイトオブジェクトを返す同等のchr()

Python 2.xにはchr()があり、これは0〜255の範囲の数値を、その数値を持つ1文字のバイト文字列に変換し、unichr()は、 0-0x10FFFFの範囲から、そのUnicodeコードポイントを持つ1文字のUnicode文字列。 Python 3.xはunichr()chr()に置き換え、その「Unicode文字列はデフォルトです」ポリシーに準拠していますが、何も見つかりません_2to3_ユーティリティ(2.6以降)は、古いchr()が行ったこととまったく同じことを行いますが、chr呼び出しをそのままにしますが、これは一般的には正しくありません:(

(これは、8ビットバイトに関して明示的に定義されているファイル形式を解析およびシリアル化するためのものです。)

37
zwol

Python2とPython3で同じように機能するbytearray((255、))の使用を検討してください。両方のPython世代で、結果のbytearray-objectは、Python2のstr()およびPython3の実際のbytes()のエイリアスであるbytes(obj)に変換できます。

# Python2
>>> x = bytearray((32,33))
>>> x
bytearray(b' !')
>>> bytes(x)
' !'

# Python3
>>> x = bytearray((32,33))
>>> x
bytearray(b' !')
>>> bytes(x)
b' !'
15

以下を試してください:

b = bytes([x])

例えば:

>>> bytes([255])
b'\xff'
39
Mark Byers

Python 2/3互換コードを記述したい場合は、 six.int2byte

8
youfu
>>> import struct
>>> struct.pack('B', 10)
b'\n'
>>> import functools
>>> bchr = functools.partial(struct.pack, 'B')
>>> bchr(10)
b'\n'
5
SangYoung Lee

さらに別の方法(Python 3.5以降):

>>> b'%c' % 65
b'A'
4
Ecir Hana