如何将HEX的前零添加到BIN字符串?

问题描述 投票:-1回答:1

我正在尝试在Excel中为CAN总线数据实现位提取器。我在算法部分中苦苦挣扎,因此这主要独立于Excel / openpyxl。

我有一个表,其中ID存储在B列中,每个时间步长的二进制代码存储在F列中。我想解析二进制数字并提取包含信号值的部分。一个ID可以具有一个或多个信号。根据ID,我要遍历所有行并将二进制转换为十进制(如下所示)。这些ID包含3、4、5、6、7或8个字节,为每个ID定义(以下示例:2E有8个字节,4A有5个字节)。

输入:

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

有组织的输入:A B C D E F G H .. 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

问题:由于在测量开始时,大多数值都设置为零(十六进制,在E列中),因此BIN不包括这些值,因此无法正确提取信号。我不知道如何在convertHEXtoBIN()函数中执行此操作(请参见下文)。E列中的HEX值是一个字符串,我确实从该字符串成功转换为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
python algorithm binary openpyxl can-bus
1个回答
1
投票

每十六进制的两个字符需要8个二进制字符。

这是一个简单的计算,您可以让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数据等事实并不重要。

© www.soinside.com 2019 - 2024. All rights reserved.