1try: 2 import ustruct as struct 3except: 4 try: 5 import struct 6 except ImportError: 7 print("SKIP") 8 raise SystemExit 9 10print(struct.calcsize("<bI")) 11print(struct.unpack("<bI", b"\x80\0\0\x01\0")) 12print(struct.calcsize(">bI")) 13print(struct.unpack(">bI", b"\x80\0\0\x01\0")) 14 15# 32-bit little-endian specific 16#print(struct.unpack("bI", b"\x80\xaa\x55\xaa\0\0\x01\0")) 17 18print(struct.pack("<l", 1)) 19print(struct.pack(">l", 1)) 20print(struct.pack("<i", 1)) 21print(struct.pack(">i", 1)) 22print(struct.pack("<h", 1)) 23print(struct.pack(">h", 1)) 24print(struct.pack("<b", 1)) 25print(struct.pack(">b", 1)) 26 27print(struct.pack("<bI", -128, 256)) 28print(struct.pack(">bI", -128, 256)) 29 30print(struct.calcsize("100sI")) 31print(struct.calcsize("97sI")) 32print(struct.unpack("<6sH", b"foo\0\0\0\x12\x34")) 33print(struct.pack("<6sH", b"foo", 10000)) 34 35s = struct.pack("BHBI", 10, 100, 200, 300) 36v = struct.unpack("BHBI", s) 37print(v == (10, 100, 200, 300)) 38 39# network byte order 40print(struct.pack('!i', 123)) 41 42# check that we get an error if the buffer is too small 43try: 44 struct.unpack('I', b'\x00\x00\x00') 45except: 46 print('struct.error') 47 48# first arg must be a string 49try: 50 struct.pack(1, 2) 51except TypeError: 52 print('TypeError') 53 54# make sure that unknown types are detected 55try: 56 struct.pack("z", 1) 57except: 58 print("Unknown type") 59 60# Initially repitition counters were supported only for strings, 61# but later were implemented for all. 62print(struct.unpack("<3B2h", b"foo\x12\x34\xff\xff")) 63print(struct.pack("<3B", 1, 2, 3)) 64 65# pack_into 66buf = bytearray(b'>>>123<<<') 67struct.pack_into('<bbb', buf, 3, 0x41, 0x42, 0x43) 68print(buf) 69struct.pack_into('<bbb', buf, -6, 0x44, 0x45, 0x46) 70print(buf) 71 72# check that we get an error if the buffer is too small 73try: 74 struct.pack_into('I', bytearray(1), 0, 0) 75except: 76 print('struct.error') 77 78try: 79 struct.pack_into('<bbb', buf, 7, 0x41, 0x42, 0x43) 80except: 81 print('struct.error') 82try: 83 struct.pack_into('<bbb', buf, -10, 0x41, 0x42, 0x43) 84except: 85 print('struct.error') 86 87# unpack_from 88buf = b'0123456789' 89print(struct.unpack_from('<b', buf, 4)) 90print(struct.unpack_from('<b', buf, -4)) 91try: 92 print(struct.unpack_from('<b', buf, 10)) 93except: 94 print('struct.error') 95try: 96 print(struct.unpack_from('<b', buf, -11)) 97except: 98 print('struct.error') 99