Как добавить первые нули HEX в строку BIN? - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь реализовать битовый экстрактор для данных шины CAN в Excel. Я борюсь с частью алгоритма, поэтому это в основном не зависит от Excel / openpyxl.

У меня есть таблица с идентификатором, хранящимся в столбце B, и двоичный код для временного шага в столбце F. Я хочу проанализировать двоичные числа и извлечь части, которые содержат значение сигналов. Один идентификатор может иметь один или несколько сигналов. В зависимости от идентификатора, я хочу go через все строки и преобразовать двоичный код в десятичный (как показано ниже). Идентификаторы содержат 3, 4, 5, 6, 7 или 8 байтов, которые определены для каждого идентификатора (пример ниже: 2E имеет 8 байтов, 4A имеет 5 байтов).

Ввод:

A  B  C D  E            F            G   H  .. M
.. 2E .... 0000000000000AA4.. 
...4A ...  02478304B.. 

Организованный ввод: AB C DEFGH .. M .. 2E .... 00 00 00 00 00 00 0A A4 .. ... 4A ... 00 24 78 30 4B ..

Токовый выход:

A B  C D E     F   G    H  .. M
..2E .... ...  101010100100 
..4A .......   100100011110000011000001001011

Требуемый выход:

A B  C D E     F   G    H  .. M
..2E .... ...  0000000000000000000000000000000000000000000000000000101010100100 
..4A .......   100100011110000011000001001011

ВОПРОС: Поскольку в начале измерения установлено большинство значений в ноль (в HEX, в столбце E), BIN не включает их, и сигналы не могут быть извлечены правильно. Я не знаю, как это сделать в функции convertHEXtoBIN() (см. Ниже). Значение HEX в столбце E - это строка, из которой я успешно преобразовал в BIN, но нули в начале не были включены в код BIN. Те нули в конце включены.

Подход: В приведенной ниже функции я бы добавил условие if, чтобы поймать первые нули, cell.value содержит ноль, пока не появится первый HEX code != 0, а затем эти нули затем добавляются в восемь раз (8 раз ноль, если появляются два нуля, 4 раза, если появляется один ноль) и ставятся перед двоичным кодом res. Другое решение может состоять в том, чтобы позволить функции convertHEXtoBIN() включать нули (а не пренебрегать ими), но я не знаю, возможно ли это вообще ...

У вас есть идея, как это реализовать?

Код пока:

import openpyxl
from openpyxl import Workbook

theFile = openpyxl.load_workbook('Adapted_T013.xlsx')
allSheetNames = theFile.sheetnames 
print("All sheet names {} " .format(theFile.sheetnames)) 
sheet = theFile.active
def convertHEXtoBIN():
    max_row_var = sheet.max_row+1
    for row in sheet.iter_rows(min_row=1, max_row=max_row_var,values_only = True): 
        for cell in sheet["E"]:
            if cell.value is not None:
                inputHEX = str(cell.value)
                res = "{0:08b}".format(int(inputHEX,16))
                sheet.cell(row=cell.row, column=6).value = res 
        break

1 Ответ

1 голос
/ 18 февраля 2020

Вам нужно 8 символов двоичного кода на каждые 2 символа шестнадцатеричного числа.

Это простой расчет, и вы можете позволить python сделать заполнение за вас.

inputHEX = str(cell.value)
res = "{value:0{width}b}".format(value=int(inputHEX, 16), width=len(inputHEX) * 4)
sheet.cell(row=cell.row, column=6).value = res 

Врозь Исходя из этого, я думаю, вы бы получили больше ответов, если бы задали простые вопросы, такие как «как сохранить ведущие нули при преобразовании шестнадцатеричного в двоичный» или что-то в этом роде. Компоновка вашего Excel, тот факт, что это CAN-данные и т. Д. На самом деле не имеет значения.

...