C/C++には新しく、ここでは苦労しています。私は読み込みたい16進数の32ビット符号付き整数の.binファイルを持っています。最初の2つの数字を読み込む必要があります。これらはデータの残りの部分についての情報が含まれていますが、これも正しくできません。テストファイルは、最初の2つの数字が私のコードを実行しているようC言語での32ビットバイナリでの読み込み
00000004
00000003
を持っている私に私のデータサイズ変数の808464394を提供します。私はprintf形式を%lxとして指定しようとしましたが、それだけでprintf形式に苦しんでいます。
私は長整数型を選択しましたが、これは最善の選択であるように長い署名が32ビットであることを理解しています。後で、私は各長いものを切り刻み、長い間のビットのグループを見る必要があります。
誰かが私が欲しいものではない数字がプリントアウトされている理由についてアドバイスをしてもらえますか?また、long intが適切なデータ型でない場合は、別の方法を提案してください。
以下のコードが添付されています。
は、あなたが直接メモリ内の数値に数値の小数表現を読んでいる
int getsizes(long &data_size, long &image_size);
int main()
{
long* data = NULL; // pointer of arry we will read data into.
long data_size, image_size;
// get data_size and image_size from task1.bin
if (getsizes(data_size,image_size)) cerr << "Error getting data_size,image_size" ;
int Idata_size = (int) data_size; // creat my array to store rest of file in
data = new long[Idata_size];
// get rest of data (still to do)
// interprate data operations (still todo).
delete [] data; // freeing memory just for completeness even though program is about to exit.
data = NULL;
return 0;
}
\\functions
int getsizes(long &data_size, long &image_size)
{
FILE *fp;
fp=fopen("test01.bin", "rb"); // open for reading
if (fp==0) cerr << "Error openeing file"<<endl;
fread(&data_size, sizeof(data_size), 1, fp); //sizeof(data_size) should be 32
fread(&image_size, 32, 1, fp);
#ifdef DEBUG
printf ("data_size= %ld \n", data_size);
cout <<"call4" <<endl;
printf ("image_size= %ld \n", image_size);
#endif
fclose(fp); //
return 0; // succsess.
}
ファイルを書き込むコードを表示できますか? –
私はファイルとステートメントを持っているだけです。ファイルはUNIXスタイルの行末のASCIIテキストで、16進数の32ビット符号付き整数で構成されています。 – Tommy
16進エディタまたは通常のテキストエディタを使用してファイルの内容を検査していますか?テキストエディタで '00000001'が表示されている場合、これはバイナリファイルではなく、@ Marceloの答えは正しいです。 –