Базовая аутентификация с токеном Guid для REST API вместо имени пользователя / пароля

После просмотра многих похожих вопросов я написал что-то, что, надеюсь, сделает то, что я хотел.

f = 1.00
negative = False
if f < 0:
    f = f*-1
    negative = True

s = struct.pack('>f', f)
p = struct.unpack('>l', s)[0]
hex_data =  hex(p)

scale = 16
num_of_bits = 32
binrep = bin(int(hex_data, scale))[2:].zfill(num_of_bits)
if negative:
    binrep = '1' + binrep[1:]

binrep - результат. Каждая часть будет объяснена.


f = 1.00
negative = False
if f < 0:
    f = f*-1
    negative = True

Преобразует число в положительное, если отрицательное, и устанавливает переменную отрицательную в значение false. Причина этого заключается в том, что разница между положительными и отрицательными двоичными представлениями находится только в первом бите, и это был более простой способ, чем выяснить, что происходит не так, когда весь процесс обрабатывается с отрицательными числами.


s = struct.pack('>f', f)                          #'?\x80\x00\x00'
p = struct.unpack('>l', s)[0]                     #1065353216
hex_data =  hex(p)                                #'0x3f800000'

s является шестнадцатеричным представлением двоичного файла f. это, однако, не в симпатичной форме, в которой я нуждаюсь. То, где p входит. Это int-представление шестнадцатеричных s. А затем другое преобразование, чтобы получить симпатичный гекс.


scale = 16
num_of_bits = 32
binrep = bin(int(hex_data, scale))[2:].zfill(num_of_bits)
if negative:
    binrep = '1' + binrep[1:]

scale является базой 16 для шестнадцатеричного. num_of_bits равно 32, так как float 32 бита, он используется позже, чтобы заполнить дополнительные места 0, чтобы добраться до 32. Получил код для binrep из этого вопроса . Если число было отрицательным, просто измените первый бит.


Я знаю, что это уродливо, но я не нашел приятного пути, и мне это было нужно быстро. Комментарии приветствуются.

30
задан badikumar 23 August 2012 в 06:46
поделиться