2016-09-30 22 views
0

私は16進コード化されたデータをPythonのソケット経由で別のクライアントに送信したいと思います。私は今、私はそれが3Python 3のPython 2 str.decode( 'hex')?

データは次のようになりますのpythonするポートにしたいのpython 2にいくつかの時間前にすべてを行うために管理:

""" 16 03 02 """ 
その後

私は文字列にそれを得るために、この機能を使用します:

x.replace(' ', '').replace('\n', '').decode('hex') 

それは、この(ちなみに型STRである)のようになります。

'\x16\x03\x02' 

今manag python 3でこれを見つけるためにED:

codecs.decode('160302', 'hex') 

が、それは別の型を返します。

b'\x16\x03\x02' 

をそして、私はエンコードすべてが適切な言語ではないので、私はUTF-8またはいくつかのデコーダを使用することはできません、などそこに無効なバイトがあります(例: \ x00、\ xFF)。どのように私は文字列のソリューションを得ることができる任意のアイデアは再びPython 2のようにエスケープ?

おかげ

答えて

-1
a = """ 16 03 02 """.encode("utf-8") 
#Send things over socket 
print(a.decode("utf-8")) 

はなぜ再びUTF-8とのソケットおよびデコードして送信、UTF-8でエンコードしませんか?

0

Python 3の '​​str'オブジェクトは、バイトシーケンスではなく、ユニコードコードポイントのシーケンスです。

「データ送信」とは、sendを呼び出した場合、bytesを使用するのが適切なタイプです。

あなたが本当に文字列をしたい場合は(ない3つのバイトが、12 Unicodeコードポイント):あなたがコードでそれらを表現するために、バックスラッシュを倍増する必要がある

>>> import codecs 
>>> s = str(codecs.decode('16ff00', 'hex'))[2:-1] 
>>> s 
'\\x16\\xff\\x00' 
>>> print(s) 
\x16\xff\x00 

注意。

関連する問題