运行在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中的string之间有什么区别吗?
任何关于如何解决这个问题的想法都会受到极大的赞赏。
Windows:机器上的版本是2.7,而在上是3.6
发布于 2018-08-06 11:09:51
关键是在Python2.x中,str类型是(有时!)一系列字节,除非您显式地要求它这样做,否则不会进一步解释它。
在Python3.x中,str类型被解释为UTF-8,我认为它是标准的。
因此,您希望在Python3.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
您需要小心,但在这种情况下,我理解它只是转换了二进制数据,所以我们不期望在范围之外的任何Unicode字符,raw_unicode_escape将成功地进行de/encode。
所以没问题。
https://stackoverflow.com/questions/51685660
复制相似问题