Как рассчитывается int.from_bytes ()? - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь понять, что на самом деле делает from_bytes().

Документация упоминает об этом :

Аргумент byteorder определяет порядок байтов, используемый дляпредставляют целое число.Если byteorder «большой», самый старший байт находится в начале байтового массива.Если byteorder «маленький», самый старший байт находится в конце байтового массива.Чтобы запросить собственный порядок байтов в хост-системе, используйте sys.byteorder в качестве значения порядка байтов.

Но на самом деле это не говорит мне, как на самом деле вычисляются значения байтов.Например, у меня есть этот набор байтов:

In [1]: byte = b'\xe6\x04\x00\x00'

In [2]: int.from_bytes(byte, 'little')
Out[2]: 1254

In [3]: int.from_bytes(byte, 'big')
Out[3]: 3859021824

In [4]:

Я попытался ord(), и он возвращает это:

In [4]: ord(b'\xe6')
Out[4]: 230

In [5]: ord(b'\x04')
Out[5]: 4

In [6]: ord(b'\x00')
Out[6]: 0

In [7]:

Я не вижу, как 1254 или 3859021824 было вычислено из значений выше.

Я также нашел этот вопрос , но, похоже, он не объясняет, как именно он работает.

Так как рассчитывается?

1 Ответ

0 голосов
/ 24 мая 2018

Большой порядок байтов похож на обычную десятичную запись, но в базе 256:

230 * 256**3 + 4 * 256**2 + 0 * 256**1 + 0 * 256**0 = 3859021824

точно так же, как

1234 = 1 * 10**3 + 2 * 10**2 + 3 * 10**1 + 4 * 10**0

Для небольшого порядка байтов порядок обратный:

0 * 256**3 + 0 * 256**2 + 4 * 256**1 + 230 = 1254
...