0

私はmallocを使用して宣言したソースバッファを持っており、freadを使用して大きなファイルからいくつかのデータをバッファに読み込みました。ここで、このソース バッファーからデータの代替チャンク (たとえば、それぞれ 2 バイト) を 2 つのターゲット バッファーに分離したいと考えています。この問題は、n 番目ごとのチャンクを n 個のターゲット バッファにコピーすることに推定できます。2 つのターゲット バッファーの最も単純なケースのサンプル コードの形で助けが必要です。これは私が考えたことであり、正しいことではないと確信しています。

int totsamples = 256*2*2;
int *sbuff = malloc(totsamples);
int *tbuff1 = malloc(totsamples/2);
int *tbuff2 = malloc(totsamples/2);
elements = fread(sbuff, 2, 256*2, fs);
for(i = 0; i<256; i++)
{
  tbuff1[i] = sbuff[i*2];
  tbuff2[i] = sbuff[(i*2) + 1];
}
4

1 に答える 1

1

多分これはあなたとアイデアを与えるでしょう:

for(i = 0; i<256; i++)
{
  tbuff1[2*i+0] = sbuff[i*4+0];
  tbuff1[2*i+1] = sbuff[i*4+1];
  tbuff2[2*i+0] = sbuff[i*4+2];
  tbuff2[2*i+1] = sbuff[i*4+3];
}

注:上記のコードは、パラメーターに関して間違ってmalloc()います。意味が不明であるtotsamplesため、使用する前に何かを修正してください...

別の注意: 2 つ以上の長いチャンクが必要な場合memcpyは、コピーを使用するのが理にかなっています。

提案: などのマジック ナンバーの代わりに定数を使用しconst int SAMPLES=256;ます。また、よくわかりませんが、サイズintは2だと思いますか?sizeof(int)代わりにetcを使用しないでください(また、のサイズがint2 になることはめったにありません)。

うーん...整数を使用してバイトをコピーして一度に4バイトをコピーすることで、実際に物事を最適化しようとしていますか? しないでください!「時期尚早の最適化は諸悪の根源」 . コードを別の方法で動作させた後、後でそれを検討することもできますが、最初に動作する非ハッキー バージョンを作成します。

于 2013-02-15T07:25:06.800 に答える