4

生のバイトを扱うプログラムを書きました (これが正しい名前かどうかはわかりません!) が、ユーザーはデータをプレーンな文字列として入力します。

それらを変換する方法は?

メソッドを試してみましたが、長さ 0 の文字列が返されます。

開始文字列は次のとおりです。

5A05705DC25CA15123C8E4750B80D0A9

必要な結果は次のとおりです。

\x5A\x05\x70\x5D\xC2\x5C\xA1\x51\x23\xC8\xE4\x75\x0B\x80\xD0\xA9

そして、ここに私が書いた方法があります:

def convertStringToByte(string):
    byte_char = "\\x"
    n=2
    result = ""
    bytesList = [string[i:i+n] for i in range(0, len(string), n)]
    for i in range(0, len(bytesList)):
        bytesList[i] = byte_char + bytesList[i]
    return result
4

2 に答える 2

11

使用binascii.unhexlify():

import binascii

binary = binascii.unhexlify(text)

binascii.hexlify()操作をミラーリングするために、同じモジュールも必要です。

デモ:

>>> import binascii
>>> binary = '\x5A\x05\x70\x5D\xC2\x5C\xA1\x51\x23\xC8\xE4\x75\x0B\x80\xD0\xA9'
>>> text = '5A05705DC25CA15123C8E4750B80D0A9'
>>> binary == binascii.unhexlify(text)
True
>>> text == binascii.hexlify(binary).upper()
True

このhexlify()操作では小文字の16 進数が生成されますが、これは呼び出しで簡単に修正でき.upper()ます。

于 2013-03-29T11:08:00.583 に答える
4

5A(16 進数を表す文字列) から0x5Aまたは(整数) を取得し、90それらを にフィードする必要がありchr()ます。で最初の変換を行うことができるので、次のint('0x5A', 16)ようなものが得られます

chr(int('0x5A', 16))
于 2013-03-29T11:04:23.743 に答える