python中的静态强制转换

时间:2015-05-07 15:05:05

标签: python casting ros

我的问题如下:

我正在使用ROS,我目前正在尝试从Kinect传感器的PointCloud读取值。 值为PointCloud2类型,PointCloud2.data包含PointCloud的数据,类型为uint8 []。

在我的项目中,我目前正在使用python,并且我已经成功注册并检索了数据。我的问题是,当试图检索它们时,python将uint8 []数组解析为字符串。

我遇到问题的脚本的当前部分是以下内容:

date_range

我知道在c ++中我可以做类似

的事情
def PointCloud(self, PointCloud2):
    self.lock.acquire()
        for x in PointCloud2.data:
            print x
    self.lock.release()

获取无符号整数的值。是否存在与python等效的静态强制转换?

在我的情况下,print x输出ASCII字符。 我怎样才能检索到它的int值?

干杯,

帕诺斯

2 个答案:

答案 0 :(得分:3)

使用struct.unpack获取x中二进制数据编码的整数值。

print struct.unpack("!I", x)

(我假设x包含网络字节顺序的4字节整数;如果您需要struct以外的格式,请参阅!I模块的文档。)< / p>

更新:我错过了你有一个无符号字节数组;在这种情况下,请使用

struct.unpack("B", x)

答案 1 :(得分:1)

Python不支持以任何形式进行转换;这是邪恶的。

实现您想要的一个版本是将数据转换为十六进制:

print ['%02x' % e for e in PointCloud2.data]

或者您可以使用struct module将二进制数据转换为Python结构。如果您要处理数据,则应查看具有array类型的Numpycreate from a lot of different source

对于图像处理,请查看OpenCV。对于使用Kinect的现有Python工具,请参阅Python- How to configure and use Kinect