Static cast equivalent in python
My problem is the following:
I am using ROS and I am currently trying to read values from a PointCloud of a Kinect sensor. The values are of type PointCloud2 and PointCloud2.data holds the data of the PointCloud and is of type uint8.
In my project I am currently using python and I have successfully registered and retrieved the data. My issue is that when trying to retrieve them python parses the uint8 array as strings.
The current part of the script where I have the problem is the follwowing:
def PointCloud(self, PointCloud2): self.lock.acquire() for x in PointCloud2.data: print x self.lock.release()
I know that in c++ I can do something like
std::cout << static_cast< int >( u );
To get the value of the unsigned integer. Is there a static cast equivalent to python?
In my case print x outputs ASCII characters. How could I retrieve the int value of that?
Use struct.unpack to get the integer value encoded by the binary data in x.
print struct.unpack("!I", x)
(I'm assuming x contains a 4-byte integer in network byte order; consult the documentation for the struct module if you need a format other than !I.)
Update: I missed that you have an array of unsigned bytes; in that case, use
Python doesn't support casting in any form; it's evil.
One version to achieve what you want is convert the data to hex:
print ['%02x' % e for e in PointCloud2.data]
or you can use the struct module to convert binary data into Python structures. If you want to process the data, you should look at Numpy which has an array type that you can create from a lot of different source.