我正在尝试使用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)
答案 0 :(得分:0)
据我所能理解的问题
遍历转换后的ASCII字符列表
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)
使用python内置函数转换为ASCII 请参阅Adam
将所有条目附加到列表中,同时将它们转换为迭代
答案 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
===========数据已发送到输出文件============