Удалить запятые из списка и преобразовать шестнадцатеричное в десятичное значение - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь извлечь шестнадцатеричное значение переменной длины из файла журнала BLF, начиная с индексации в позиции [7].Я могу успешно извлечь шестнадцатеричные значения переменной длины в списке.Проблема заключается в удалении запятых между шестнадцатеричными значениями из каждого извлеченного списка.

Ниже приведен файл BLF, из которого я извлекаю шестнадцатеричные значения переменной длины:

['Timestamp:', '1546626931.138813', 'ID:', '0764', 'S', 'DLC:', '8', '00', '00', '00', '00', '00', '00', '00', '00', 'Channel:', '0']
['Timestamp:', '1546626931.138954', 'ID:', '0365', 'S', 'DLC:', '8', '00', '00', '00', '80', 'db', '80', 'a2', '7f', 'Channel:', '1']
['Timestamp:', '1546626931.139053', 'ID:', '0765', 'S', 'DLC:', '6', 'ae', '05', '00', '00', '05', '00', 'Channel:', '1']
['Timestamp:', '1546626931.139697', 'ID:', '022a', 'S', 'DLC:', '4', '40', 'c0', '50', '6c', 'Channel:', '1']
.
.
.
.

Вывод, который я получаю в файле, выглядит следующим образом:

['00', '00', '00', '00', '00', '00', '00', '00']
['00', '00', '00', '80', 'db', '80', 'a2', '7f']
['ae', '05', '00', '00', '05', '00']
['40', 'c0', '50', '6c']

Но я хочу, как показано ниже: сначала удалить запятые из исходного списка amd, а затем преобразовать шестнадцатеричные значения, показанные ниже, в десятичное число:

['0000000000000000']
['00000080db80a27f']
['ae0500000500']
['40c0506c']

Мой код указан ниже:

import can
import csv
import datetime
# import timestamp as timestamp

filename = open('C:\\Users\\xyz\\Downloads\\BLF File\\hex_Decimal.csv', "w")
log1 = can.BLFReader('C:\\Users\\xyz\\Downloads\\BLF File\\test.blf')


#Extracting Hexadecimal and convert into decimal
for time in log1:
    time = str(time).split()
    data=str(time[7:(7 + int(time[6]))])
    "".join(data)
    print(data)

Я не могу удалить запятые из списка и преобразовать список шестнадцатеричных чисел в десятичные значения внутри списка.Любая помощь приветствуется.Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Вы можете использовать int(<string with hex number>, 16) для преобразования в десятичное значение:

data = [
['00', '00', '00', '00', '00', '00', '00', '00'],
['00', '00', '00', '80', 'db', '80', 'a2', '7f'],
['ae', '05', '00', '00', '05', '00'],
['40', 'c0', '50', '6c'],
]

for row in data:
    s = ''.join(row)
    print('{: <{}}: {}'.format(s, 16, int(s, 16)))

Печать:

0000000000000000: 0
00000080db80a27f: 553438454399
ae0500000500    : 191336498070784
40c0506c        : 1086345324
1 голос
/ 26 июня 2019

Если тип time сообщений, извлеченных из BLF-файла, является просто списком строк, все готово:

...
#Extracting Hexadecimal and convert into decimal
for time in log1:
    data = int(''.join(time[7:7+int(time[6])]), 16)
    print([data])

Вы должны получить:

[0]
[553438454399]
[191336498070784]
[1086345324]
...