使用python进行二进制转换

问题描述 投票:0回答:2

我正在尝试在python中为数据网络类创建一个程序,以读取包含8个字符的文件,例如00111001,并将其放入数据包中,然后转换为ASCII。我想迭代数据包,如果它是1,则根据for循环的索引在conversation_list = [128,64,32,16,8,4,2,1]中添加数字。我似乎无法进入任何我的if语句。

文件包含:0,0,1,1,1,0,0,1

这是我的输出:

Accecpable参数数量

在下一行打印文件消息

0, 0, 1, 1, 1, 0, 0, 1

00111001

['00111001']

这里

0

1

0

import sys

filename = sys.argv[1]

if len(sys.argv) == 2:
    print("Accecpable number of arguments") else:
    print("Wrong number of arguments")
    sys.exit(1)

message_data = open(filename, "r")

message_text = message_data.read()

if len(message_text) == 0:
    print("Mess has zero length, " + filename + "was empty")

print("Printing files message on next line")  
print(message_text)

replace_message = message_text.replace(", ", "") 
print(replace_message)

packets = []

for index in range(0, len(replace_message), 8):
    substring = replace_message[index:index+8]
    packets.append(substring)

print(packets)

conversion_list = [128,64,32,16,8,4,2,1] running_total = 0 

for packets_index, value in enumerate(packets):
    if value[packets_index] == 1:
        running_total + conversion_list[packets_index]
        print(conversion_list[packets_index] + " added")

    if value[packets_index] == 0:
        print(packets_index)
        continue

print (running_total)
python
2个回答
0
投票

我能理解这个问题

  1. 您想将二进制输入转换为Decimal
  2. 将小数转换为ASCII字符
  3. 迭代转换后的ASCII字符列表 这是一个函数,它计算给定二进制数的十进制等效值 def binaryToDecimal(二进制): binary1 = binary decimal, i, n = 0, 0, 0 while(binary != 0): dec = binary % 10 decimal = decimal + dec * pow(2, i) binary = binary//10 i += 1 print(decimal) 使用python内置函数转换为ASCII参考Adam这个非常简单的解决方案 将所有条目附加到列表中,同时将它们转换为迭代

0
投票

这是我正在寻找的解决方案。我最终绘制了一些图片并发现我需要在那里添加另一个for循环。

import sys
#stores .py and file being read
filename = sys.argv[1]

#checks for amount of arguments
if len(sys.argv) == 2:
    print("Accecpable number of arguments")
else:
    print("Wrong number of arguments")
    sys.exit(1)

#opens and reads the file
message_data = open(filename, "r")
#stores data into object
message_text = message_data.read()


#check if there is any data in the file by the length
if len(message_text) == 0:
    print("Mess has zero length, " + filename + "was empty")

print("displaying message form text:", message_text)

#remove commas 
replace_message = message_text.replace(", ", "") 
print("replacing all commas: ", replace_message)

packets = []

# puts message into a packet
for index in range(0, len(replace_message), 8):
    substring = replace_message[index:index+8]
    packets.append(substring)

print("packet has been made", packets)

conversion_list = [128,64,32,16,8,4,2,1]


running_total = 0

#starting at negative 1 so count starts at 0 for index 
count = -1

print("\n=========converting to binrary============\n")


#iterate through packet element
for packets_index, value in enumerate(packets):
    running_total = 0 
    for char in value :
       #counter for iterations
       count += 1


       if char == "1" :
           #add value of conversion)list index to runnin total
            running_total += conversion_list[count]

         #show user what has been added
         print(conversion_list[count], "has been added")

       else: 
           pass

print ("total is: ", running_total)

print("ASCII result for", running_total, "is the character: ",
chr(running_total))

print("\n==========Data has been sent to an output file============\n") 
outfile = open("output_task1.txt", "w+" ,
encoding = "utf-8", newline ="\r\n") 
outfile.write(chr(running_total))

这是输出:

Accecpable参数数量

显示消息表单文本:0,0,1,1,1,0,0,1

替换所有逗号:00111001

数据包已被制作['00111001']

=========转换为二进制============

已添加32

已添加16

已添加8

已添加1

总数是:57

57的ASCII结果是字符:9

==========数据已发送到输出文件============

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