Source code for utils.intan.intanutil.qstring

#! /bin/env python
#
# Michael Gibson 23 April 2015


import os
import struct
import sys


[docs]def read_qstring(fid): """Read Qt style QString. The first 32-bit unsigned number indicates the length of the string (in bytes). If this number equals 0xFFFFFFFF, the string is null. Strings are stored as unicode. """ (length,) = struct.unpack("<I", fid.read(4)) if length == int("ffffffff", 16): return "" if length > (os.fstat(fid.fileno()).st_size - fid.tell() + 1): print(length) raise Exception("Length too long.") # convert length from bytes to 16-bit Unicode words length = int(length / 2) data = [] for i in range(0, length): (c,) = struct.unpack("<H", fid.read(2)) data.append(c) if sys.version_info >= (3, 0): a = "".join([chr(c) for c in data]) else: a = "".join([unichr(c) for c in data]) return a
if __name__ == "__main__": a = read_qstring(open(sys.argv[1], "rb")) print(a)