2

strtol() を使用して文字列から数値を読み取ろうとすると、数値が範囲外の場合に返されるはずの LONG_MAX 数値が返されますが、私の数値はそれほど大きくありません

main(){
    char linea[30]={"110111010111111000000000"};
    long num=strtol(linea,NULL,0);
    printf("%s\n%X",linea,num);
}

実際の結果:
110111010111111000000000
7FFFFFFF

必要な結果:
110111010111111000000000
DD7C00

4

2 に答える 2

5

strtol のマニュアルページによると、指定した「0」引数は「最善の判断を使用する」ことを意味し、この場合はdecimalです。指定した「必要な結果」が示唆するように、 2進数に変換する場合は、「0」を使用せずに「2」を使用してください。

于 2012-06-01T03:13:12.847 に答える
0

おそらくベース0を渡すためです

試す:

int main(){
    char linea[30] = {"110111010111111000000000"};
    long num       = strtol(linea, NULL, 10);
    printf("%s\n%X", linea, num);
}

編集 どうやらベース0はstrtol関数の特別な値です:

base の値が 0 の場合、サブジェクト シーケンスの予想される形式は、10 進定数、8 進定数、または 16 進定数の形式であり、その前に「+」または「-」記号を付けることができます。

だから、あなたは0を使うことができると思います、あなたを疑ってすみません。

于 2012-06-01T03:10:07.040 に答える