バイナリの文字列があり、それをatoi()
を使用して整数に変換します。これを行うと、バイナリが自動的に10進数に変換されるようです。問題は、結果の整数が負であり、オンラインの2進数から10進数へのコンバーターのいずれとも一致しないことです。 atoi()
で何か問題がありますか?代わりに別の関数を使用する必要がありますか?
コード:
string myString = "01000101";
int x = atoi(myString.c_str());
cout << x;
ありがとう
atoi
は2進数を処理せず、大きな10進数として解釈するだけです。あなたの問題は、それが高すぎて、10進数として解釈されるために整数オーバーフローが発生することです。
解決策は、C++ 11でstoi
に追加されたstol
、stoll
またはstring
を使用することです。のようにそれらを呼び出します
int i = std::stoi("01000101", nullptr, 2);
int
値です。std::string
です。size_t *
で、最初の数字以外の文字のインデックスを保存します。int
です。関数の詳細については、 そのcppreferenceページ を参照してください。
ほぼ同じ名前のC++ 11以前の関数もあることに注意してください。例:strtol
とC++ 11 stol
の比較。
これらはさまざまなベースでも機能しますが、同じ方法でエラー処理を実行しません(たとえば、「hello」を文字列)およびおそらくC++ 11バージョンを優先する必要があります。
私の要点を言うと、strtol
とC++ 11 stol
の両方に「Hello」を渡すと、次のようになります。
strtol
は0
を返し、それをエラーとして識別する方法はありません。stol
はstd::invalid_argument
をスローし、何かが間違っていることを示します。"Hello"のようなものを整数として誤って解釈すると、バグが発生する可能性があるため、私の意見では回避する必要があります。
ただし、完全を期すために そのcppreferenceページ へのリンクも使用してください。
strtol()
を2
を最後の引数として使用する必要があるようです。