ユーザーにバイナリ入力を強制しようとしていますが、ユーザーが \n を入力すると、すべてが機能します。プログラムはその入力をスキップするだけなので、後でリストにインデックス外エラーがスローされます。
payload = input("Input the binary data payload: ")
for i in str(payload):
if (i == "0" or i == "1"):
ユーザーにバイナリ入力を強制しようとしていますが、ユーザーが \n を入力すると、すべてが機能します。プログラムはその入力をスキップするだけなので、後でリストにインデックス外エラーがスローされます。
payload = input("Input the binary data payload: ")
for i in str(payload):
if (i == "0" or i == "1"):
サム・ムスマンの答えは、あなたがやっていることはうまくいかない理由を説明しています.
しかし、それを修正する方法を知りたい場合は…「バイナリ入力を強制する」とはどういう意味か完全にはわかりません。
入力が完了したことをどのように知ることができますか? の場合input
、ユーザーが改行を押すとすぐに実行されるため、それは明らかにあなたが望むものではありません。
また、ユーザーが Unicode を与えるために与えたものは何でもinput
自動的にs します。それは明らかにあなたがここで望んでいるものではありません.decode
str
その上、利用可能な場合input
は使用readline
します。これにより、さまざまな制御文字が単に自分自身を表すのではなく、行編集を行うようになります。
たとえば、EOF まですべてを読み取りたい場合、それは簡単です。
payload = sys.stdin.buffer.read()
…ただし、インタラクティブなアプリでは、「EOF まで」は「ユーザーが行で ^D を単独で押すまで (Unix)、または明確に文書化されていない状況で ^Z を押すまで」 (Windows) を意味することに注意してください。非常に便利.シェル入力のリダイレクトには最適ですが、インタラクティブなアプリへの貼り付けについて話している.
512 バイトなどの固定サイズを読みたい場合、それも簡単で、そのような問題はありません。
payload = sys.stdin.buffer.read(512)
他に意味のあることを想像するのは難しいです。たとえば、空白行までの複数行を読み取るのは非常に簡単ですが、バイナリ データの場合、途中に空白行が存在する可能性があります。または、他に使用できると思われるもの。