0

ユーザーにバイナリ入力を強制しようとしていますが、ユーザーが \n を入力すると、すべてが機能します。プログラムはその入力をスキップするだけなので、後でリストにインデックス外エラーがスローされます。

    payload = input("Input the binary data payload: ") 
for i in str(payload):
        if (i == "0" or i == "1"):
4

2 に答える 2

3

ドキュメントから:

次に、[input] 関数は入力から行を読み取り、それを文字列に変換して (末尾の改行を取り除きます)、それを返します。

したがって、入力関数は決して\n. 生の文字を読み取る別の関数を見つける必要があります。 この質問は役に立つかもしれません。

于 2013-09-17T01:26:12.787 に答える
1

サム・ムスマンの答えは、あなたがやっていることはうまくいかない理由を説明しています.

しかし、それを修正する方法を知りたい場合は…「バイナリ入力を強制する」とはどういう意味か完全にはわかりません。

入力が完了したことをどのように知ることができますか? の場合input、ユーザーが改行を押すとすぐに実行されるため、それは明らかにあなたが望むものではありません。

また、ユーザーが Unicode を与えるために与えたものは何でもinput自動的にs します。それは明らかにあなたがここで望んでいるものではありません.decodestr

その上、利用可能な場合inputは使用readlineします。これにより、さまざまな制御文字が単に自分自身を表すのではなく、行編集を行うようになります。


たとえば、EOF まですべてを読み取りたい場合、それは簡単です。

payload = sys.stdin.buffer.read()

…ただし、インタラクティブなアプリでは、「EOF まで」は「ユーザーが行で ^D を単独で押すまで (Unix)、または明確に文書化されていない状況で ^Z を押すまで」 (Windows) を意味することに注意してください。非常に便利.シェル入力のリダイレクトには最適ですが、インタラクティブなアプリへの貼り付けについて話している.

512 バイトなどの固定サイズを読みたい場合、それも簡単で、そのような問題はありません。

payload = sys.stdin.buffer.read(512)

他に意味のあることを想像するのは難しいです。たとえば、空白行までの複数行を読み取るのは非常に簡単ですが、バイナリ データの場合、途中に空白行が存在する可能性があります。または、他に使用できると思われるもの。

于 2013-09-17T01:33:42.567 に答える