1

これはすでに議論されているかもしれませんが、関連するトピックは見つかりませんでした。

ファイルから値を読み取り、を使用して値shortのバッファに格納したいと考えています。だから基本的に私はこれをしたい:intfread

  int *data; //int buffer
  data = (int *) malloc(1000 * sizeof(int));
  fread(data, sizeof(short), 1000, infile); //infile is organized in 2-byte chunks

データは 2 バイトのチャンク ( short) でファイルに格納されます。intしかし、それらのデータを読み取るときは、それらをバッファーに入れたいと思います。shortバッファからバッファにコピーせずにそれを行うにはどうすればよいintですか? freadポインタを取得voidするので、バッファのタイプは気にしません。

4

3 に答える 3

3

fread関数は型を認識していません、それは正しいです。そのため、生のバイトを読み取って変換することはできず、提供されたバッファにそのまま入れます。ご存知のように、shortほとんどのプラットフォームでは、は2バイトですが、intは4バイトです。だから、それfreadについては考えていないので、それは機能しません。

一度に1つずつ読み取り、それをバッファーに入れるintか、一時shortバッファーに読み込んでから、ループして値ごとにintバッファーにコピーします。

于 2012-12-04T20:04:28.460 に答える
1

1)fscanfで使用できます%hu。これは、実際の値がバイナリではなくテキスト形式の場合に機能します。

unsigned short a
fp = fopen("myfile","r");
while(fscanf(fp,"%hu",&a))
{
    // put a in the array of unsigned short
}

2)fscanfで使用でき%cます。これは、実際の値がバイナリ形式の場合に機能します。

unsigned short a;
char b,c;
fp = fopen("myfile","r");
while(fscanf(fp,"%c",&b) && fscanf(fp,"%c",&c))
{
    a = (unsigned short) b;
    a = a << 8;
    a+= (unsigned short) c;
    // put a in the array of unsigned short
}
于 2012-12-04T20:21:07.977 に答える
1

Naja、「短いバッファーから int バッファーにコピーする」ことを行う必要があります。これは、infile をデータに読み込むだけで、ファイルからデータと呼ばれるメモリにバイト単位でコピーされるため、2 つの short を 1 つに書き込むためです。整数。

于 2012-12-04T20:08:20.920 に答える