繁体   English   中英

从列表中将六进制转换为二进制

[英]Converting Hexa to Binary from list

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

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

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

我希望 output 是:

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))))

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

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")

Output:

0x413e960d:
000000000000000001000001001111101001011000001101

0x1c1c81c7:
000000000000000000011100000111001000000111000111

0xa0000000:
000000000000000010100000000000000000000000000000

您忘记从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

我的 output:

000000000000000001000001001111101001011000001101
000000000000000000011100000111001000000111000111
000000000000000010100000000000000000000000000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM