本文整理匯總了Python中struct.unpack_from方法的典型用法代碼示例。如果您正苦於以下問題:Python struct.unpack_from方法的具體用法?Python struct.unpack_from怎麽用?Python struct.unpack_from使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類struct
的用法示例。
在下文中一共展示了struct.unpack_from方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: _GetMACFromData
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def _GetMACFromData(data):
"""Unpacks and formats MAC address data.
Args:
data: buffer, usually an NSCFData object
Returns:
string containing the MAC address
Raises:
InterfaceError: if data can't be unpacked
"""
try:
unpacked = struct.unpack_from('BBBBBB', data)
except struct.error as e:
logging.error('Could not unpack MAC address data: %s', e)
raise InterfaceError(e)
return ':'.join(['{:02x}'.format(i) for i in unpacked])
示例2: parse_columns
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def parse_columns(text, base, count):
# Parse the columns from the table definition. Columns start with
# a short record length indicator, followed by type and sequence
# information (each a short), and the name (prefixed by the length).
columns = []
for i in range(count):
if len(text[base:]) < 8:
break
col_len, = struct.unpack_from('H', text, base)
base = base + 2
if len(text[base:]) < col_len:
break
col_data = text[base - 1:base - 1 + col_len]
type_, col_id = struct.unpack_from('>HH', col_data, 0)
text_len, = struct.unpack_from('>I', col_data, 4)
col_name = decode_text(col_data[8:8 + text_len])
if col_name is None:
continue
columns.append({
'id': col_id,
'name': col_name,
'type': type_
})
base = base + col_len
return columns
示例3: parse_record
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def parse_record(meta, dat_fh):
# Each data record is stored as a linked list of data fragments. The
# metadata record holds the first and second offset, while all further
# chunks are prefixed with the next offset.
offset, length, next_offset, next_length = struct.unpack('<IHIH', meta)
dat_fh.seek(offset)
if length == 0:
if next_length == 0 or next_length == 0xffff:
return
data = dat_fh.read(length)
while next_length != 0 and next_length != 0xffff:
dat_fh.seek(next_offset)
next_data = dat_fh.read(min(252, next_length))
if len(next_data) < 4:
break
next_offset, = struct.unpack_from('<I', next_data)
data += next_data[4:]
if next_length > 252:
next_length -= 252
else:
next_length = 0
return data
示例4: read
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def read(self, size_or_format):
if isinstance(size_or_format, (str, unicode, bytes)):
size = struct.calcsize(size_or_format)
fmt = size_or_format
else:
size = size_or_format
fmt = None
if self._size - self._pos < size:
raise BuddyError('Unable to read %lu bytes in block' % size)
data = self._value[self._pos:self._pos + size]
self._pos += size
if fmt is not None:
if isinstance(data, bytearray):
return struct.unpack_from(fmt, bytes(data))
else:
return struct.unpack(fmt, data)
else:
return data
示例5: from_binary_descriptor
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def from_binary_descriptor(cls, data):
"""
Generates a new USBConfiguration object from a configuration descriptor,
handling any attached subordiate descriptors.
data: The raw bytes for the descriptor to be parsed.
"""
length = data[0]
# Unpack the main colleciton of data into the descriptor itself.
descriptor_type, total_length, num_interfaces, index, string_index, \
attributes, max_power = struct.unpack_from('<xBHBBBBB', data[0:length])
# Extract the subordinate descriptors, and parse them.
interfaces = cls._parse_subordinate_descriptors(data[length:total_length])
return cls(index, string_index, interfaces, attributes, max_power, total_length)
示例6: from_binary_descriptor
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def from_binary_descriptor(cls, data):
"""
Creates an endpoint object from a description of that endpoint.
"""
# Parse the core descriptor into its components...
address, attributes, max_packet_size, interval = struct.unpack_from("xxBBHB", data)
# ... and break down the packed fields.
number = address & 0x7F
direction = address >> 7
transfer_type = attributes & 0b11
sync_type = attributes >> 2 & 0b1111
usage_type = attributes >> 4 & 0b11
return cls(number, direction, transfer_type, sync_type, usage_type,
max_packet_size, interval)
示例7: _load_elf
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def _load_elf( self, exe ):
# parse file header
if exe[:7] != b'\x7fELF\x01\x01\x01':
raise RuntimeError( "Invalid ELF32 header" )
if unpack( 'HH', exe, 0x10 ) != ( 2, 144 ):
raise RuntimeError( "Not a TI-PRU executable" )
( entry, phoff, phsz, nph ) = unpack( 'II10xHH', exe, 0x18 )
if self.entrypoint is None:
if entry & 3:
raise RuntimeError( "Entrypoint not word-aligned: 0x%x" % entry )
self.entrypoint = entry >> 2
elif entry != self.entrypoint << 2:
warn( "Overriding entrypoint of ELF executable" )
for i in range( nph ):
( pt, *args ) = unpack( '8I', exe, phoff )
phoff += phsz
if pt == 1:
self._load_elf_segment( exe, *args )
elif pt == 0x70000000:
pass # segment attributes
else:
warn( "Unknown program header type: 0x%x" % pt )
示例8: ParseMemoryRuns
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def ParseMemoryRuns(self):
self.runs = []
result = win32file.DeviceIoControl(
self.fd, INFO_IOCTRL, "", 102400, None)
fmt_string = "Q" * len(self.FIELDS)
self.memory_parameters = dict(zip(self.FIELDS, struct.unpack_from(
fmt_string, result)))
self.dtb = self.memory_parameters["CR3"]
self.kdbg = self.memory_parameters["KDBG"]
offset = struct.calcsize(fmt_string)
for x in range(self.memory_parameters["NumberOfRuns"]):
start, length = struct.unpack_from("QQ", result, x * 16 + offset)
self.runs.append((start, length))
示例9: ParseMemoryRuns
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def ParseMemoryRuns(self, fhandle):
# Set acquisition mode. If the driver does not support this mode it will
# just fall back to the default.
win32file.DeviceIoControl(
fhandle, CTRL_IOCTRL,
struct.pack("I", PMEM_MODE_PTE), 4, None)
result = win32file.DeviceIoControl(
fhandle, INFO_IOCTRL, b"", 102400, None)
fmt_string = "Q" * len(self.FIELDS)
self.memory_parameters = dict(zip(self.FIELDS, struct.unpack_from(
fmt_string, result)))
offset = struct.calcsize(fmt_string)
for x in range(self.memory_parameters["NumberOfRuns"]):
start, length = struct.unpack_from("QQ", result, x * 16 + offset)
self.add_run(start, start, length, self.fhandle_as)
示例10: processCONT
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def processCONT(i, files, rscnames, sect, data):
global DUMP
# process a container header, most of this is unknown
# right now only extract its EXTH
dt = data[0:12]
if dt == b"CONTBOUNDARY":
rscnames.append(None)
sect.setsectiondescription(i,"CONTAINER BOUNDARY")
else:
sect.setsectiondescription(i,"CONT Header")
rscnames.append(None)
if DUMP:
cpage, = struct.unpack_from(b'>L', data, 12)
contexth = data[48:]
print("\n\nContainer EXTH Dump")
dump_contexth(cpage, contexth)
fname = "CONT_Header%05d.dat" % i
outname= os.path.join(files.outdir, fname)
with open(pathof(outname), 'wb') as f:
f.write(data)
return rscnames
示例11: nullsection
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def nullsection(datain,secno): # make it zero-length without deleting it
datalst = []
nsec = getint(datain,number_of_pdb_records,b'H')
secstart, secend = getsecaddr(datain,secno)
zerosecstart, zerosecend = getsecaddr(datain, 0)
dif = secend-secstart
datalst.append(datain[:first_pdb_record])
for i in range(0,secno+1):
ofs, flgval = struct.unpack_from(b'>2L',datain,first_pdb_record+i*8)
datalst.append(struct.pack(b'>L',ofs) + struct.pack(b'>L', flgval))
for i in range(secno+1, nsec):
ofs, flgval = struct.unpack_from(b'>2L',datain,first_pdb_record+i*8)
ofs = ofs - dif
datalst.append(struct.pack(b'>L',ofs) + struct.pack(b'>L',flgval))
lpad = zerosecstart - (first_pdb_record + 8*nsec)
if lpad > 0:
datalst.append(b'\0' * lpad)
datalst.append(datain[zerosecstart: secstart])
datalst.append(datain[secend:])
dataout = b''.join(datalst)
return dataout
示例12: readTagSection
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def readTagSection(start, data):
'''
Read tag section from given data.
@param start: The start position in the data.
@param data: The data to process.
@return: Tuple of control byte count and list of tag tuples.
'''
controlByteCount = 0
tags = []
if data[start:start+4] == b"TAGX":
firstEntryOffset, = struct.unpack_from(b'>L', data, start + 0x04)
controlByteCount, = struct.unpack_from(b'>L', data, start + 0x08)
# Skip the first 12 bytes already read above.
for i in range(12, firstEntryOffset, 4):
pos = start + i
tags.append((ord(data[pos:pos+1]), ord(data[pos+1:pos+2]), ord(data[pos+2:pos+3]), ord(data[pos+3:pos+4])))
return controlByteCount, tags
示例13: loadHuff
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def loadHuff(self, huff):
if huff[0:8] != b'HUFF\x00\x00\x00\x18':
raise unpackException('invalid huff header')
off1, off2 = struct.unpack_from(b'>LL', huff, 8)
def dict1_unpack(v):
codelen, term, maxcode = v&0x1f, v&0x80, v>>8
assert codelen != 0
if codelen <= 8:
assert term
maxcode = ((maxcode + 1) << (32 - codelen)) - 1
return (codelen, term, maxcode)
self.dict1 = lmap(dict1_unpack, struct.unpack_from(b'>256L', huff, off1))
dict2 = struct.unpack_from(b'>64L', huff, off2)
self.mincode, self.maxcode = (), ()
for codelen, mincode in enumerate((0,) + dict2[0::2]):
self.mincode += (mincode << (32 - codelen), )
for codelen, maxcode in enumerate((0,) + dict2[1::2]):
self.maxcode += (((maxcode + 1) << (32 - codelen)) - 1, )
self.dictionary = []
示例14: get_encoding
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def get_encoding(data_buffer, subrs):
"""Read a charstring's encoding stream out of a string buffer response
from cffCompressor.cc"""
pos = 0
num_calls = data_buffer[pos]
pos += 1
enc = []
for j in range(num_calls):
insertion_pos = struct.unpack_from('<I', data_buffer[pos:pos+4])[0]
pos += 4
subr_index = struct.unpack_from('<I', data_buffer[pos:pos+4])[0]
pos += 4
subrs[subr_index].freq += 1
enc.append((insertion_pos, subrs[subr_index]))
return enc, pos
示例15: _parse_session_info
# 需要導入模塊: import struct [as 別名]
# 或者: from struct import unpack_from [as 別名]
def _parse_session_info(data, field_count):
i = 0
offset = 0
session_token = None
session_ttl = None
while i < field_count:
field_len, field_id = struct.unpack_from("! I B", data, offset)
field_len -= 1
offset += 5
if field_id == _SESSION_TOKEN_FIELD_ID:
fmt_str = "%ds" % field_len
session_token = struct.unpack_from(fmt_str, data, offset)[0]
elif field_id == _SESSION_TTL_FIELD_ID:
fmt_str = ">I"
session_ttl = struct.unpack_from(fmt_str, data, offset)[0]
offset += field_len
i += 1
return session_token, session_ttl