Как преобразовать строку байтов в int в Python

Вы близки, но colorWithRed: green: blue: alpha: ожидает значения от 0.0 до 1.0, поэтому вам нужно сдвинуть биты вправо и разделить на 255.0f:

CGFloat red   = ((baseColor1 & 0xFF0000) >> 16) / 255.0f;
CGFloat green = ((baseColor1 & 0x00FF00) >>  8) / 255.0f;
CGFloat blue  =  (baseColor1 & 0x0000FF) / 255.0f;

EDIT. Также сканирование NSScannerHexInt пропустит минус 0x перед шестнадцатеричной строкой, но я не думаю, что он пропустит символ # перед вашей шестнадцатеричной строкой. Вы можете добавить эту строку, чтобы обработать это:

[scanner2 setCharactersToBeSkipped:[NSCharacterSet symbolCharacterSet]]; 

143
задан jww 23 December 2018 в 12:39
поделиться

3 ответа

Можно также использовать структура модуль, чтобы сделать это:

>>> struct.unpack("<L", "y\xcc\xa6\xbb")[0]
3148270713L
102
ответ дан Zitrax 23 December 2018 в 12:39
поделиться

Как Greg сказал, можно использовать структуру, если Вы имеете дело с двоичными значениями, но если у Вас просто есть "шестнадцатеричное число", но в формате байта Вы могли бы хотеть просто преобразовать ее как:

s = 'y\xcc\xa6\xbb'
num = int(s.encode('hex'), 16)

... это совпадает с:

num = struct.unpack(">L", s)[0]

... кроме он будет работать на любое число байтов.

66
ответ дан James Antill 23 December 2018 в 12:39
поделиться
import array
integerValue = array.array("I", 'y\xcc\xa6\xbb')[0]

Предупреждение: вышеупомянутое является решительно определенным для платформы. И "I" спецификатор и порядок байтов строки-> международное преобразование зависят от Вашей конкретной реализации Python. Но если Вы хотите преобразовать много целых чисел/строк сразу, тогда модуль массива делает это быстро.

6
ответ дан Rafał Dowgird 23 December 2018 в 12:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: