История изменений
Исправление
tz4678,
(текущая версия)
:
то я видел, в коде у меня такое:
creation_time = r.read_long()
где r:
import struct
from typing import IO, Tuple
class BinaryReader:
def __init__(self, fp: IO[bytes]) -> None:
self.fp = fp
def read(self, n: int) -> bytes:
return self.fp.read(n)
def seek(self, offset: int = 0, *args, **kwargs) -> int:
return self.fp.seek(offset, *args, **kwargs)
# In [1]: import sys
# In [2]: sys.byteorder
# Out[2]: 'little'
# принудительно в little-endian
# Используем типы из C#
# https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/builtin-types/integral-numeric-types
def read_byte(self) -> int:
return struct.unpack('<B', self.read(1))[0]
def read_bool(self) -> int:
return struct.unpack('<?', self.read(1))[0]
def read_short(self) -> int:
return struct.unpack('<h', self.read(2))[0]
def read_ushort(self) -> int:
return struct.unpack('<H', self.read(2))[0]
def read_int(self) -> int:
return struct.unpack('<i', self.read(4))[0]
def read_uint(self) -> int:
return struct.unpack('<I', self.read(4))[0]
def read_long(self) -> int:
return struct.unpack('<q', self.read(8))[0]
def read_ulong(self) -> int:
return struct.unpack('<Q', self.read(8))[0]
def read_float(self) -> float:
return struct.unpack('<f', self.read(4))[0]
def read_double(self) -> float:
return struct.unpack('<d', self.read(8))[0]
def read_pstring(self) -> str:
""" Pascal String """
i = self.read_byte()
# Мне неизвестно в какой кодировке строки
return self.read(i).decode('utf-8', 'replace')
Исходная версия
tz4678,
:
то я видел, в коде у меня такое:
creation_time = r.read_long()
где r:
import struct
from typing import IO, Tuple
class BinaryReader:
def __init__(self, fp: IO[bytes]) -> None:
self.fp = fp
def read(self, n: int) -> bytes:
return self.fp.read(n)
def seek(self, offset: int = 0, *args, **kwargs) -> int:
return self.fp.seek(offset, *args, **kwargs)
# In [1]: import sys
# In [2]: sys.byteorder
# Out[2]: 'little'
# принудительно в little-endian
# Используем типы из C#
# https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/builtin-types/integral-numeric-types
def read_byte(self) -> int:
return struct.unpack('<B', self.read(1))[0]
def read_bool(self) -> int:
return struct.unpack('<?', self.read(1))[0]
def read_short(self) -> int:
return struct.unpack('<h', self.read(2))[0]
def read_ushort(self) -> int:
return struct.unpack('<H', self.read(2))[0]
def read_int(self) -> int:
return struct.unpack('<i', self.read(4))[0]
def read_uint(self) -> int:
return struct.unpack('<I', self.read(4))[0]
def read_long(self) -> int:
return long(struct.unpack('<q', self.read(8))[0])
def read_ulong(self) -> int:
return struct.unpack('<Q', self.read(8))[0]
def read_float(self) -> float:
return struct.unpack('<f', self.read(4))[0]
def read_double(self) -> float:
return struct.unpack('<d', self.read(8))[0]
def read_pstring(self) -> str:
""" Pascal String """
i = self.read_byte()
# Мне неизвестно в какой кодировке строки
return self.read(i).decode('utf-8', 'replace')