2016-03-01 3 views
0

У меня есть строка с номерами 5:240. Из этого я должен отправить числа из строки по их шестнадцатеричному представлению. Номер должен быть в диапазоне двух байтов. Но я хочу отправить точное представление на моем последовательном порту, например '\x00\x05\x00\xf0'. Может ли кто-нибудь помочь мне в этом?Преобразование строки в шестнадцатеричный для отправки для последовательной связи

Я попытался следующие отрывки, но не успех:

b='5:240' 
b = b.split(':') 
for i in range(len(b)): 
    print hex(int(b[i])) 
    print len(hex(int(b[i]))) 

Результат:

0x5 
3 
0xf0 
4 

Выход показывает шестигранную преобразование, но это не было бы возможно для меня, чтобы отправить его на последовательный порт, причина длина меняется. Может ли кто-нибудь решить эту проблему?

ответ

1

Ответ: Что касается ответа от SELÇUK в. Я получил следующее решение.

def word_hex(w): 
    a = int(w/256) 
    b = w % 256 
    return "{0:#0{1}x}{2:#0{3}x}".format(a,4,b,4).replace("0x", "") 

b='5:240' 
b = b.split(':') 
for i in b: 
    print(word_hex(int(i)).decode("hex")) 
1

Вы можете использовать hexadecimal format specifier, x:

def word_hex(w): 
    a = int(w/256) 
    b = w % 256 
    return "{0:#0{1}x}{2:#0{3}x}".format(a,4,b,4).replace("0x", "\\x") 

b='5:240' 
b = b.split(':') 
for i in b: 
    print(word_hex(int(i))) 

отпечатки

\x00\x05 
\x00\xf0 
+0

Благодарим за ответ. Но это просто преобразование числа в шестнадцатеричное, где я должен отправить его также на последовательный порт. Для вашего решения это дает мне len (word_hex (int (i))) = 8', которые отправляют 8 символов на порт. Мне нужен только 2 байта (символов) для определенного номера. – abhi1610

+0

ОК. Я получил его после некоторой настройки в скрипте. Чтобы получить желаемый результат, просто удалите '' \\ x "', оставив его пустым, также нужно отредактировать строку. 'print (word_hex (int (i))). encode (" hex ")'. – abhi1610

Смежные вопросы