struct1.py 2.3 KB

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