Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
C style strings
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:
    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
            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'.split(b'\x00')[0]
>>> b'No null'.split(b'\x00')[0]
b'No null'
also, might want to look at:

Possibly Related Threads…
Thread Author Replies Views Last Post
  Splitting strings in list of strings jesse68 3 434 Mar-02-2022, 05:15 PM
Last Post: DeaD_EyE
  Finding multiple strings between the two same strings Slither 1 1,544 Jun-05-2019, 09:02 PM
Last Post: Yoriz
  lists, strings, and byte strings Skaperen 2 3,210 Mar-02-2018, 02:12 AM
Last Post: Skaperen
  Is this good style? league55 3 2,181 Jan-14-2018, 04:25 PM
Last Post: Gribouillis

Forum Jump:

User Panel Messages

Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020