Python Forum

Full Version: C style strings
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I have a Python program that communicates with a C program over a socket connection. The C program sends a "message" which contains floats and ints and some strings as binary data. Strings are a fixed number of bytes in the message even though the length of the string sent may differ, The C program is rather sloppy about sending strings, so the bytes for 'Hello' may look like b'Hello\x00\xf1\x03' when received by the Python program.

Is there a an existing solution for converting this into a Python string that only contains the decoded bytes[0:4]? Currently I am doing this:
    @staticmethod
    def unpackstr(buf, size=None):
        """Unpack string from buf with max length of size"""
        if size is None:
            size = len(buf)
        length = buf.find(b'\00')
        if length < 0:
            length = size
        else:
            length = min(length, size)
        return buf[:length].decode('UTF-8')
Nothing wrong with that, but you can just split() on the null.

>>> b'Hello\x00\xf1\x03'
b'Hello\x00\xf1\x03'
>>> b'Hello\x00\xf1\x03'.split(b'\x00')[0]
b'Hello'
>>> b'No null'.split(b'\x00')[0]
b'No null'