Я "взламываю" мой маршрутизатор, и мне нужно переписать одну JS-функцию, которая принимает дату в формате hexdec и преобразует ее в Y md
Код JS выглядит так:
return [(((n >> 16) & 0xFF) + 1900), ((n >>> 8) & 0xFF), (n & 0xFF)];
где n является переменной в формате 0x123456 (например, 6 шестнадцатеричных цифр после знака 0x), обнаружил, что python имеет такие операторы, как >>, но не имеет >>> оператора. Любая идея, как это сделать? благодаря
Прежде всего вы должны знать, что побитовый оператор для 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
Используйте >>
. Вы все равно & 0xFF
знак с помощью & 0xFF
. Обратите внимание, что вы не можете оставить & part, т.е. (N >> 8) & 0xff, или вы получите неверный результат, как вы уже отметили.