python - 字节到字符串的转换

标签 python string

我正在从 TCP 连接读取数据。如果我从 wireshark(网络监视器)读取数据,我会得到 02501c41d11ec06a471102 但如果我在 python 中读取数据,我会以字节为单位:

b'\x02P\x1cA\xd1\x1e\xc0jG\x11\x02'
<class 'bytes'>

我如何转换它? 我试过这个:

#!/usr/bin/env python

import socket
import binascii
import time
import sys

TCP_IP = '10.20.0.195'
TCP_PORT = 9761
BUFFER_SIZE = 2048

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))

while 1:
    data = s.recv(1024)
    print (data)
    data2 = data.decode("utf-8")
    typ = type(data)
    print (typ)

但是如果运行这个我得到:

b'\x02P\x1cA\xd1\x00\x00\x02\xcb\x11\x00'
Traceback (most recent call last):
  File "Z:/programeren/domotica/try again/receive.py", line 18, in <module>
    data2 = data.decode("utf-8")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd1 in position 4: invalid continuation byte

只是说清楚我要转身

b'\x02P\x1cA\xd1\x00\x00\x02\xcb\x11\x00'

进入

02501c41d11ec06a471102

最佳答案

使用binascii.b2a_hex (或 binascii.hexlify)。

>>> import binascii
>>> binascii.b2a_hex(b'\x02P\x1cA\xd1\x00\x00\x02\xcb\x11\x00')
b'02501c41d1000002cb1100'
>>> binascii.b2a_hex(b'\x02P\x1cA\xd1\x00\x00\x02\xcb\x11\x00').decode('ascii')
'02501c41d1000002cb1100'

关于python - 字节到字符串的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18042769/

相关文章:

python - 应用重力的镶嵌钻头板

python - argparse 在类内的单独函数中并从 init 调用 args

python - 在 python 中初始化变量,一些变量来自构造函数,一些变量来自用户

php - str_replace() 与 foreach、大写和精确单词匹配

c++ - C++ 字符串和字符串 vector 的 C 实现

C++,linux,如何从字符串中有效地 pop_back() 一个非 latin1 字符

python - 正确地将图例添加到seaborn联合图中

python - Virtualenv: 'deactivate' 是否会影响正在运行的进程?

javascript - 字符串中的通配符替换

java - 如何在android中将单行数据存储到sqlite数据库的字符串数组中