Zoeken…


Syntaxis

  • pack (fmt, v1, v2, ...)
  • uitpakken (fmt, buffer)

Maak een zoeklijst op in een byte-object

from struct import pack

print(pack('I3c', 123, b'a', b'b', b'c'))  # b'{\x00\x00\x00abc'

Pak een byte-object uit volgens een opmaakreeks

from struct import unpack

print(unpack('I3c', b'{\x00\x00\x00abc'))  # (123, b'a', b'b', b'c')

Een structuur inpakken

De module " struct " biedt de mogelijkheid om python-objecten in te pakken als aaneengesloten stuk bytes of een stuk bytes om te zetten in python-structuren.

De pack-functie heeft een opmaakreeks en een of meer argumenten en retourneert een binaire reeks. Dit lijkt erg op het formatteren van een string, behalve dat de uitvoer geen string is, maar een stuk bytes.

import struct
import sys
print "Native byteorder: ", sys.byteorder
# If no byteorder is specified, native byteorder is used
buffer = struct.pack("ihb", 3, 4, 5)
print "Byte chunk: ", repr(buffer)
print "Byte chunk unpacked: ", struct.unpack("ihb", buffer)
# Last element as unsigned short instead of unsigned char ( 2 Bytes)
buffer = struct.pack("ihh", 3, 4, 5)
print "Byte chunk: ", repr(buffer)

Output:

Oorspronkelijke byteorder: Little Byte Chunk: '\ x03 \ x00 \ x00 \ x00 \ x04 \ x00 \ x05' Byte Chunk uitgepakt: (3, 4, 5) Byte Chunk: '\ x03 \ x00 \ x00 \ x00 \ x04 \ x00 \ X05 \ x00'

U kunt de byte-volgorde van het netwerk gebruiken met gegevens die zijn ontvangen van het netwerk of gegevens inpakken om deze naar het netwerk te verzenden.

import struct
# If no byteorder is specified, native byteorder is used
buffer = struct.pack("hhh", 3, 4, 5)
print "Byte chunk native byte order: ", repr(buffer)
buffer = struct.pack("!hhh", 3, 4, 5)
print "Byte chunk network byte order: ", repr(buffer)

Output:

Byte chunk native byte volgorde: '\ x03 \ x00 \ x04 \ x00 \ x05 \ x00'

Byte chunk netwerk byte volgorde: '\ x00 \ x03 \ x00 \ x04 \ x00 \ x05'

U kunt optimaliseren door de overhead van het toewijzen van een nieuwe buffer te vermijden door een buffer te bieden die eerder is gemaakt.

import struct
from ctypes import create_string_buffer
bufferVar = create_string_buffer(8)
bufferVar2 = create_string_buffer(8)
# We use a buffer that has already been created
# provide format, buffer, offset and data
struct.pack_into("hhh", bufferVar, 0, 3, 4, 5)
print "Byte chunk: ", repr(bufferVar.raw)
struct.pack_into("hhh", bufferVar2, 2, 3, 4, 5)
print "Byte chunk: ", repr(bufferVar2.raw)

Output:

Byte chunk: '\ x03 \ x00 \ x04 \ x00 \ x05 \ x00 \ x00 \ x00'

Byte chunk: '\ x00 \ x00 \ x03 \ x00 \ x04 \ x00 \ x05 \ x00'



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow