Я чувствую себя полным инструментом для публикации этого, это настолько просто, и я не могу поверить, что потратил последние два дня на эту проблему. Я пробовал все решения, которые я мог найти по этому поводу (серьезно, я покажу вам свою интернет-историю), но безрезультатно. Вот проблема:
Я разбираю последовательную строку из UC. Он имеет длину 52 байта и содержит множество различных переменных данных. Данные закодированы в упакованном двоично-десятичном коде.
Ex: .....blah.....0x01 0x5E .....blah
015E hex дает десятичное число 350. Это значение, которое я хочу. Я отлично читаю последовательную строку, я использовал binascii.hexify для печати байтов, чтобы убедиться, что они правильные. я использую
data = ser.read()
и помещал данные в массив, если перевод строки не получен. Я пытался сделать массив байтовым массивом, списком, всем, что я мог найти, но ничего не работает.
Я хочу отправить требуемый двухбайтовый раздел определенному методу.
def makeValue(highbyte, lowbyte)
Когда я пытаюсь использовать распаковку, соединение, упаковку, манипуляции с битами, концентрацию строк, я продолжаю сталкиваться с одной и той же проблемой.
Поскольку 0x01 и 0x5E не являются допустимыми числами int (начало заголовка и ^ в ASCII), это не сработает. Он даже не позволит мне сначала присоединиться к числам, потому что это недопустимый int.
using hex(): hex argument can't be converted to hex.
Joining the strings: invalid literal for int() with base 16: '\x01^'
using int: invalid literal for int() with base 10: '\x01^'
Packing a struct: struct.error: cannot convert argument to integer
Серьезно, я пропустил что-то действительно основное здесь? Все примеры, которые я могу найти, отлично используют все вышеперечисленные функции, но в них указаны шестнадцатеричные числа «0x1234» или числа, которые они преобразуют, являются фактическими числами ASCII. Пожалуйста помоги.
РЕДАКТИРОВАТЬ Я понял, ч3ка наставила меня на правильный путь, огромное спасибо!
Я не знаю, почему это не сработало раньше, но я зашифровал оба значения.
one = binascii.hexlify(line[7])
two = binascii.hexlify(line[8])
makeValue(one, two)`
а затем использовал char makeValues ch3ka, определенный:
def makeValue(highbyte, lowbyte)
print int(highbyte, 16)*256 + int(lowbyte, 16)
Еще раз спасибо!!!