0

文字列から 16 進数に変換する方法について、オンラインでたくさんのチュートリアルがあることを知っています。さて、私はそれについて問題を抱えています。

私のコード (以下を参照) は最大 31 文字まで機能しますが、その理由が一生わかりません。32 人のキャラクターがいる場合はいつでも、7fffffff で最大になります。

「111111111100000000001010101000」のようなものを入力できるようにする必要があります

どこがわからないだけで簡単に修正できるはずです

私の試み(コンパイル可能):

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
    int Base = 2;
    long x;
    char InputString[40];
    char *pEnd = NULL;          // Required for strtol()


    cout << "Number? ";
    cin >> InputString;
    x = strtol(InputString, &pEnd, Base);     // String to long

    cout << hex << x << endl;
    return 4;
}
4

2 に答える 2

1

Alongは 32 ビット (実際には 31 プラス符号ビット) を超えて格納することはできません。32 ビット以上が必要な場合はlong long intand を試してください。32 ビットで十分な場合はandを試してください。strtoll()unsigned longstrtoul()

于 2013-10-03T08:56:49.693 に答える
1

これはおそらく、あなたのマシンでは long が 32 ビットであり、asigned longが 2 の補数で 32 ビットを保持できないために発生します。unisgned(符号のために少し「無駄」にならない) またはlong long64 ビット幅の aを使用することができます。

unsigned long x = strtoul(InputString, &pEnd, Base);
                    ^^^^

またはlong long:

long long x = strtoll(InputString, &pEnd, Base);

関数strtolstrtoulは、C++ で長い間使用できます。実際strtolllong longC++11 で導入されました。

于 2013-10-03T08:57:47.437 に答える