Специальные операторы JS в Python

1

Я "взламываю" мой маршрутизатор, и мне нужно переписать одну JS-функцию, которая принимает дату в формате hexdec и преобразует ее в Y md

Код JS выглядит так:

return [(((n >> 16) & 0xFF) + 1900), ((n >>> 8) & 0xFF), (n & 0xFF)];

где n является переменной в формате 0x123456 (например, 6 шестнадцатеричных цифр после знака 0x), обнаружил, что python имеет такие операторы, как >>, но не имеет >>> оператора. Любая идея, как это сделать? благодаря

Теги:

2 ответа

3
Лучший ответ

Прежде всего вы должны знать, что побитовый оператор для JS работает на 32-битных данных. Хотя для python он предполагает, что данные могут иметь бесконечное количество бит.

Итак, ">>" в JS, который называется сдвигом сдвига вправо, должен равняться

def right_shift(data, bits):
    sign = (data >> 31) & 1 
    if sign:
       fills = ((sign << bits) - 1) << (32 - bits)
    else:
       fills = 0
    return ((data & 0xffffffff) >> bits) | fills

">>>" в JS называется нулевым заполнением правого сдвига, в python, поскольку он всегда заполняется нулем, поэтому вы можете просто использовать ">>". Более надежный способ убедиться, что он имеет тот же результат с js

def zero_fill_right_shit(data, bits):
    return (data & 0xffffffff) >> bits
5

Используйте >>. Вы все равно & 0xFF знак с помощью & 0xFF. Обратите внимание, что вы не можете оставить & part, т.е. (N >> 8) & 0xff, или вы получите неверный результат, как вы уже отметили.

  • 0
    просто n >> 8 не работает (возвращает 28421 вместо 6)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню