ファイルからデータを読み取っています。フォーマットは、UNIXスタイル 行末、16進数で32ビット符号付き整数 一連の被ファイルから16進データを読み取るfscanf形式コンパイル時の警告
ASCIIテキストに記載されています。
例えば
08000000
私はこのデータを読み込む関数fscanfを使用しています。
long data_size;
FILE *fp;
fp=fopen("test01.bin", "r"); // open for reading
if (fp==0) {cerr << "Error openeing file"<<endl; return 1;}
fscanf(fp, "%x", &data_size);
しかし進値が符号なしで、この問題の長い用量にキャストされているすべては私のテストファイルを使用して[OK]を実行しますが、私はコンパイル時の警告を取得し、
warning: format ‘%x’ expects type ‘unsigned int*’, but argument 3 has type ‘long int*’
?長い間、サインを知らせるように最重要ビットを取るでしょうか?それとも、私は問題に終わるでしょうか?または私は私の理解の印をよく捨てていますか?
おかげ
おかげで、これは、異なるマシン上で実行されます。したがって、16進値が32ビットでintが16ビットであっても、int data_sizeを使用しても問題ありませんか? (私は長いことを理解している32ビットですか?)。 – Tommy
@ Tommy、おそらく、 ''の 'int32_t'型を見てみたいです。 '(u)intN_t'がNビット長であることが保証されています:http://linux.die.net/man/3/int32_t – Joulukuusi
残念ながら、' long'と 'int'のサイズはシステムアーキテクチャに依存します。しかし、32ビットオペレーティングシステムでは、intとlongは32ビットのサイズが等しいと思います。 16ビット(16と32ビット)と64ビット(32と64?)のシステムでのみ、これは問題を引き起こす可能性があります。私はその数について本当に分かりません。 ** Hex **文字列自体には「長さ」がありません。任意の数値を16進文字列にエンコードできます。もちろん、数値が変数に収まらない場合は、オーバーフローが発生する可能性があります。その場合、エラーが設定されると思います。 – Constantinius