Я хочу создать код Python для чтения последовательных данных, преобразования их в двоичное представление и записи в файл .txt. Все входящие данные имеют тип uint8 (значение от 0 до 255) с пробелом между ними. Я нашел здесь функцию «int2bin» в SO, которая, как я думал, будет работать.
код в 'main':
if __name__ == '__main__':
#setup
ser = serial.Serial('COM18', 19200)
temp = ''
intVal = []
path = 'C:\Users\mabr\Desktop\TEST'
name = 'fileFromEEPROM'
myFile = open(join(path, name),"w")
while ser.in_waiting<1:
sleep(1)
while ser.in_waiting>0:
if ser.read(1) != ' ':
intVal[0:] = ser.read()
newData = True
if ser.read(1) == ' ':
ser.read(1)
if newData == True:
binVal = modules.int2bin(intVal, 8) #This is where the error is
myFile.write(binVal)
#temp += binVal
newData = False
intVal[:] = [] #emptying
myFile.close()
код в «модулях»:
def int2bin(integer, digits):
if integer >= 0:
return bin(integer)[2:].zfill(digits) #This is where the error is
else:
return bin(2**digits + integer)[2:]
Я получаю код ошибки:
«Файл» C: \ Users \ mabr \ Documents \ int8ToAscii \ src \ modules.py », строка 10, в int2bin
возвратный бин (целое число) [2:]. zfill (цифры)
Ошибка типа: объект списка не может быть интерпретирован как индекс "
Я думаю, что цель функции int2bin довольно понятна, но дело в том, что она должна взять целое число, хранящееся в intVal, преобразовать его в двоичный файл и вернуть результат.
Я думаю, что я мог ошибиться с тем, как я храню последовательные данные, и это может быть неправильно, но я не уверен, как сохранить трехзначное число как одно целое (как Пример «255» может быть получен, но я боюсь, что он хранится в отдельных записях в intVal, таких как «intVal [] = {'2', '5', '5'}).
Пожалуйста, прокомментируйте, если я что-то пропустил. Я все еще новичок в SO и, возможно, не упомянул что-то важное. Спасибо.