在Linux下将Windows字符串转换为numpy时的fromstring()

时间:2018-08-04 12:39:03

标签: python linux windows numpy tostring

运行在32位Windows计算机上的Pyro4服务器正在使用img.tostring()作为字符串提供numpy图像数据,转换前报告的dtypeint32

服务器代码如下:

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

1 个答案:

答案 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 encodingPython: Convert Raw String to Bytes String without adding escape chraracters

您需要小心,但是在这种情况下,我知道它只是转换后的二进制数据,因此我们不希望raw_unicode_escape范围之外的任何Unicode字符都会成功 < / em>解码/编码。

没关系。