python2.7 中\x00 怎么删除

2021-03-29 15:51:49 +08:00
 QBugHunter

Python2.7

首先是服务器穿过来的字节流,需要转换为 string(按照 ascii),比如 16 进制字节流是

"31 35 37 50 55 00 00 00 00 00"

需要转为 string

"157PU"

于是有下列代码

def byte_to_string(d):
    return binascii.a2b_hex(d)

但实际转换结果为

a = byte_to_string('31 35 37 50 55 00 00 00 00 00')
print a
>>>"157PU\x00\x00\x00\x00\x00"

请问这个 string 里几个\x00 怎么删除,我用

a.strip()
a.replace("\n","")

都不好使,最用用 len(a)测试的时候结果都还是 10

2278 次点击
所在节点    Python
9 条回复
shuax
2021-03-29 16:03:29 +08:00
s = "31 35 37 50 55 00 00 00 00 00"
b = bytes.fromhex(s)
s = b.decode()
s = s.replace('\0', '')
ruanimal
2021-03-29 16:18:36 +08:00
"157PU\x00\x00\x00\x00\x00".strip('\x00')
Keyes
2021-03-29 16:35:42 +08:00
这种直接把一整个缓冲区丢出来的服务端真心蛋疼
Olament
2021-03-29 16:58:13 +08:00
a.rstrip('\x00')
julyclyde
2021-03-29 17:08:47 +08:00
用\n 那不是显然不好使么……
fuis
2021-03-29 20:06:30 +08:00
用楼主的话来回复楼主:

没有十年脑。。。。
算了
dingwen07
2021-03-29 22:49:11 +08:00
a.strip('\x00')不行就
a.strip('\\x00')
iptables
2021-03-30 05:06:23 +08:00
>>> "157PU\x00\x00\x00\x00\x00"
'157PU\x00\x00\x00\x00\x00'
>>> a = "157PU\x00\x00\x00\x00\x00"
>>> a.rstrip('\x00')
'157PU'
>>> a.rstrip('\n')
'157PU\x00\x00\x00\x00\x00'
>>> a.rstrip('\0')
'157PU'
iptables
2021-03-30 05:07:46 +08:00
\n 相当于 \x0a,和 \x00 完全不一样啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/766188

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX