2013-05-12 3 views
0

Я использую Python 3.3.Преобразование двоичного числа в текст, читаемый человеком

Я получаю свои данные из последовательного порта, и каждый байт получает одно целое число. (число не больше 255, поэтому нет многобайтовых чисел).

Я стараюсь, чтобы это было написано в текстовом файле в человеко-читаемом тексте, поэтому я прошу помощи.

Если я получу значение 0b10000111 из моего последовательного порта, как мне получить этот номер, чтобы он отображался как «135» в моем текстовом файле? Это звучит как простая задача, но я много боролся!

Я также хочу добавить запятую, чтобы отделить значение (байты).

Это то, что я пытался:

import sys 
import serial 

port = serial.Serial('COM4', 115200) 
fileID = open('output.txt', 'a') 

while(1): 
    data = port.read(size=1) 
    if data != 0: 
     #MISSING SOME CONVERSION HERE... Tried a lot of things, 
     #but none have been correct. 
     fileID.write(data) 
     fileID.write(',') 
+2

Что 'магнезии (данные)' вернуть? – Blender

+1

Что вы пробовали, и что у вас получилось? вы пытались, например, использовать 'int (data)'? – Elazar

+0

int (data) и int (data, 2) дает мне ошибку: «invalid literal for int() с базой 2» – Phat

ответ

0

Он сейчас работает, и я хотел бы поделиться код с остальной частью вас удивительный человек:

import sys 
import serial 

port = serial.Serial('COM4', 115200, timeout=0) 
data = b'' 

while(1): 
    data = port.read() 
    print(data) 
    if data != b'': 
     fileID = open('output.txt', 'a') 
     fileID.write(str(ord(data))) 
     fileID.write(',') 
     fileID.close() 

port.close() 
1

Вы знаете, что размер data является один, и все, что вы заинтересованы в том, что первый байт. Сначала вам нужно преобразовать этот байт в целое число, а затем в строку.

fileID.write(str(ord(data[0]))) 
Смежные вопросы