LINUX.ORG.RU

История изменений

Исправление 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')