使用python进行二进制转换

时间:2019-02-12 03:03:14

标签: python

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

文件包含:0、0、1、1、1、0、0、1

这是我的输出:

可接受的参数数量

在下一行打印文件消息

0,0,1,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)

2 个答案:

答案 0 :(得分:0)

据我所能理解的问题

  1. 您要将二进制输入转换为Decimal
  2. 将小数转换为ASCII字符
  3. 遍历转换后的ASCII字符列表

    1. 这是一个计算给定二进制数的十进制等效值的函数

    def binaryToDecimal(binary):

    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)
    
    1. 使用python内置函数转换为ASCII 请参阅Adam

    2. 的这个非常简单的解决方案
    3. 将所有条目附加到列表中,同时将它们转换为迭代

答案 1 :(得分: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))

以下是输出:

可接受的参数数量

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

替换所有逗号:00111001

数据包已制成['00111001']

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

已添加32

已添加16个

已添加8个

1已添加

总数是:57

57的ASCII结果是字符:9

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