+ -
当前位置:首页 → 问答吧 → 小白问个PYTHON的字节问题

小白问个PYTHON的字节问题

时间:2010-12-01

来源:互联网


环境是3.1

在SCOKET的send()的时候需要传递的是字节流

a = b'abc'

转成字节发送成功,为什么那边获取到的时候也是b'abc',而不是abc,是不是需要自己过滤?

用struct.pack转换后为b'abc'反转回来依旧是b'abc'。这是什么情况啊?

作者: yuttee   发布时间: 2010-12-01

socket发送和接收的本来就应该是字节流啊,如果要转换成字符串,可以自己解码嘛

作者: zinak   发布时间: 2010-12-01

我知道是字节流啊,我问的是,PYTHON不是字符串前加一个b就是以字节流输出吗

按道理传过去不因该接受的地方也是b'abc'呀。这点比较纳闷。。

str = struct.pack("7s","abcdefg")
print(str)
str1 = struct.unpack("7s", str)
print(str1)

作者: yuttee   发布时间: 2010-12-01

Format C Type Python Notes 
x pad byte no value  
c char bytes of length 1  
b signed char integer (1) 
B unsigned char integer  
? _Bool bool (2) 
h short integer  
H unsigned short integer  
i int integer  
I unsigned int integer  
l long integer  
L unsigned long integer  
q long long integer (3) 
Q unsigned long long integer (3) 
f float float  
d double float  
s char[] bytes (1) 
p char[] bytes (1) 
P void * integer  
按格式规定,用s解出来的就是字节啊

作者: zinak   发布时间: 2010-12-01

The c, s and p conversion codes operate on bytes objects, but packing with such codes also supports str objects, which are encoded using UTF-8.

作者: zinak   发布时间: 2010-12-01

我没说不是字节啊- -。。。
我是说为什么字符串前面始终这个b存在

哎。。
比如str1 = 'abc'
str2 = struct.pack("3s",a)
打印出来是b'abc',表示字节流

那我反转
str3 = struct.pack("3s",str2)
那str3因该等于abc吧?

但是打印出来依旧是b'abc',难道这个反转没用的?还要自己来过滤掉前面的b?

作者: yuttee   发布时间: 2010-12-01

不是,pack和unpack都是基于byte的,只不过在pack时也支持吧str默认转换成UTF8编码的byte,这个起不到反转的作用
其实是真真pack的是b'abc'

作者: zinak   发布时间: 2010-12-01

其实还是不太了解。。

我想发送出去的是'abc',接受到就变成b'abc'了。。我愚昧一下。。因为以前写其他语言没碰到过这个问题。。所以有点小白。。

作者: yuttee   发布时间: 2010-12-01