将列表中的十六进制转换为二进制

Converting Hexa to Binary from list

我正在尝试打开包含值及其六进制数据的列表,并将每一行仅转换为二进制值(带有小掩码)。

例如在我的 txt 文件中我有:

DATA0 = 0x413e960d
DATA1 = 0x1c1c81c7
DATA2 = 0xa0000000
(32 Bits)

我希望输出为:

000000000000000001000001001111101001011000001101
000000000000000000011100000111001000000111000111
000000000000000010100000000000000000000000000000
(48 Bits)

我想在一个新文件中写入这些值,由于某种原因,在我的代码中,它跳过了第一个值转换,你能帮我理解为什么吗?

代码:

with open(input,'r') as r, open(output,'w') as w:
        #lines = r.readlines()
        
        for line in r:
            # if not line.startswith('#'):
            if line.startswith('DATA'):
                #print(line)
                new_line = line.rsplit("=")[1]
                new_line.strip()
                w.writelines(new_line)
                w.writelines(new_line + str( bin(int(new_line, 16))[2:] ).zfill(48))

我也尝试过这种转换: (最后一行)

        w.writelines(new_line + str('{:048b}'.format(int(new_line.strip(), 16))))

您忘记从 line

中删除 "\n"
with open("input.txt",'r') as r, open("output.txt",'w') as w:
    for line in r:
        line_without_white_characters_including_next_line = ''.join(line.split()) # removes whitespaces and \n
        if line_without_white_characters_including_next_line.startswith('DATA'):
            new_line = line_without_white_characters_including_next_line.split("=")[1]
            w.writelines(str( bin(int(new_line, 16))[2:] ).zfill(48))
            w.writelines("\n") # need to write next line so values are not next to each other

我的输出:

000000000000000001000001001111101001011000001101
000000000000000000011100000111001000000111000111
000000000000000010100000000000000000000000000000

你用不一致的换行符写了两次你的十六进制值,但总的来说我看到所有值都被转换了。 尝试简化您的代码:

with open("file.txt",'r') as r, open("output.txt",'w') as w:
    for line in r:
        if line.startswith('DATA'):
            hex_val = line.rsplit("=")[1].strip()
            w.writelines(f"{hex_val}:\n{bin(int(hex_val, 16))[2:].zfill(48)}\n\n")

输出:

0x413e960d:
000000000000000001000001001111101001011000001101

0x1c1c81c7:
000000000000000000011100000111001000000111000111

0xa0000000:
000000000000000010100000000000000000000000000000