首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Linux下将Windows字符串转换为numpy时的fromstring()

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

Stack Overflow用户
提问于 2018-08-04 12:39:03
回答 1查看 803关注 0票数 0

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

服务器代码如下所示:

代码语言:javascript
复制
def getLastPhase(self):
    print("Sending the data now: ")
    print( self.lastPhase.dtype )
    return self.lastPhase.tostring()

客户端代码如下所示:

代码语言:javascript
复制
data = getLastPhase()

数据是在len( data ) = 4177920的Linux机器上接收的,或者精确地按照图像的大小(1024x1020 x4)接收。

但是,使用fromstring( data, dtype='int32' )会导致异常:

代码语言:javascript
复制
ValueError: string size must be a multiple of element size

如果使用int16而不是int32,则不会引发任何异常,但数据是胡说八道。

为什么在字符串大小与我的数据大小匹配而不是在int16情况下引发此异常?

在Windows和Linux中的string之间有什么区别吗?

任何关于如何解决这个问题的想法都会受到极大的赞赏。

Windows:机器上的版本是2.7,而在上是3.6

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-06 11:09:51

关键是在Python2.x中,str类型是(有时!)一系列字节,除非您显式地要求它这样做,否则不会进一步解释它。

在Python3.x中,str类型被解释为UTF-8,我认为它是标准的。

因此,您希望在Python3.x上使用byte类型。

这样做的自然方法是将字符串encode为一系列字节:

代码语言:javascript
复制
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。

所以没问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51685660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档