2013-04-23 2 views
1

Я реализую скрипт Python для чтения фреймов, отправленных XBee. ПК получит фреймы и обработает их.Операция Python XOR и ser.read()

У меня проблема, потому что я использую AP = 2 в XBee, поэтому все кадры могут иметь экранированные символы. Я хочу их обнаружить и установить реальные значения перед тем, как работать с ними.

Это фрагмент кода, в котором я прочитал сбежавшего байт:

read = ser.read() 
if(toHex(read) != '7d'): #toHex converts a byte in Hex representation 
    #escaped char 
    read = logical_xor(ser.read(), 20) #you have to take the next character and make xor 
################################# 
def logical_xor(str1, str2): 
    return bool(str1)^bool(str2) 

Но он говорит мне, что ул нельзя использовать в этой операции. Знаете ли вы, что я должен сделать, чтобы решить эту проблему?

Кроме того, я читал четыре байта вместе, как это:

read = ser.read(4) 

... и попытаться к тому же, как и раньше (пытаться получить следующую позицию (read[x+1])), но он говорит мне, что похоже вещи ...

Конверсия состоит в изготовлении XOR следующему символу и 0x20.

Любая идея?

+0

'20! = 0x20',' bool (str1) == (str == "") '. Я не понимаю, что вы ожидаете отсюда. – Eric

+0

Можете ли вы показать реализацию 'toHex'? – Eric

+0

Почему бы не настроить XBee на 'AP = 1', поэтому вам не нужно иметь дело с экранированными символами? Я никогда не был поклонником экранированного режима, это только усложняло ситуацию. – tomlogic

ответ

1

Вы, кажется, преувеличиваете вещи - что именно делает ser.read()? Строка одного символа? Если да:

read = ser.read() 
if ord(read) != 0x7d: 
    #escaped char 
    read = ord(ser.read())^0x20 
+0

Я конвертирую ser.read(), используя toHex, чтобы получить репрезентативное значение, потому что я не могу использовать значение, потому что оно печатает мусор. Если я использую read [x] = ord (прочитайте [x + 1])^0x20. Он сообщает мне, что объект «str» не поддерживает назначение элемента » – user1298272

+0

@ user1298272: В python это недопустимо:' x = "ab" '' x [0] = "c" '. Строки неизменяемы. – Eric