运行在32位Windows计算机上的Pyro4服务器正在使用img.tostring()
作为字符串提供numpy图像数据,转换前报告的dtype
是int32
。
服务器代码如下:
def getLastPhase(self):
print("Sending the data now: ")
print( self.lastPhase.dtype )
return self.lastPhase.tostring()
客户端代码如下:
data = getLastPhase()
在len( data )
= 4177920的Linux机器上接收数据,或者精确地以字节为单位的图像大小(1024x1020 x4)。
但是,使用fromstring( data, dtype='int32' )
会导致异常:
ValueError: string size must be a multiple of element size
如果使用int16
代替int32
,则不会引发异常,但数据是无意义的。
为什么在字符串大小与我的数据大小匹配的情况下引发此异常,而在int16情况下却未引发这种异常?
在Windows和Linux下,Python中的string
有区别吗?
任何有关如何克服此问题的想法将不胜感激。
编辑:Windows计算机上的python版本是2.7,而在Linux计算机上是3.6
答案 0 :(得分:1)
关键点在于,在Python 2.x中,str
类型是(有时!)一系列字节,因此除非您明确要求是这样,否则就不再作进一步解释。
在Python 3.x中,解释了str
类型 ,并且我认为它是标准的UTF-8。
因此,您希望在Python 3.x上使用byte
类型。
执行此操作的自然方法是将字符串encode
设置为一系列字节:
fromstring( data.encode('raw_unicode_escape'), dtype='int32' )
正如其他人所说, String to Bytes Python without change in encoding 和 Python: Convert Raw String to Bytes String without adding escape chraracters
您需要小心,但是在这种情况下,我知道它只是转换后的二进制数据,因此我们不希望raw_unicode_escape
范围之外的任何Unicode字符都会成功 < / em>解码/编码。
没关系。