2013-02-15 144 views
0

我有一個源緩衝區,我使用malloc聲明,並且我用fread從緩衝區中讀取了大文件中的一些數據。現在我想從這個源緩衝區中分離出數據塊的交替塊(比如說每個2個字節)到兩個目標緩衝區中。這個問題可以推斷爲將每n個塊複製到n個目標緩衝區。我需要以示例代碼的形式爲兩個目標緩衝區的最簡單情況提供幫助。這是我想到的,我確信這不是正確的。將特定數據從源緩衝區複製到多個目標緩衝區

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]; 
} 
+0

你有沒有嘗試過任何東西? – 2013-02-15 05:34:06

+0

我害怕,除非你嘗試一些東西併發布你所做的事,否則沒有人會願意幫助你。最好的方法是讓你嘗試一個樣本,然後詢問你對這個問題更精細的細節的懷疑。 – Jay 2013-02-15 05:34:43

+0

我已經添加了我能想到的代碼。現在你能幫我嗎? – vaibh24 2013-02-15 05:57:39

回答

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)等(和大小int很少2,順便說一句)。

嗯......你真的想通過使用整數複製字節來一次複製4個字節來優化事物嗎? Don't! "Premature optimization is root of all evil"。你可能會認爲,以後,你的代碼工作後,但首先創建一個工作非hacky版本,加倍如此,如果你需要問如何做到這一點,就像這裏...