2014-04-14 55 views
1

在C我讀從文件的二進制數據到一個變種data這樣的:在C中加入無符號字符指針?

unsigned char *data; 
data = malloc(size); 
int read_size = fread(data, 1, size, fp); 

我要在前面加上了var data與文件的<filename><size>。我怎樣才能做到這一點?
它不是一個合法的C字符串,因爲它是二進制數據,空字節可能遍佈整個地方。

我知道確保我爲它分配足夠的內存,但我無法弄清楚如何實際預先安排它。

+1

「memcpy」有什麼問題? –

+0

是爲了以後的存儲/日誌記錄或供程序使用嗎? – Deduplicator

+1

問題在哪裏?更加詳細一些。 –

回答

2
  1. 分配足夠的內存來data
  2. 將前綴複製到其中。
  3. 獲取參考信息,僅在後面的內容中複製2 ..
  4. 將此參考文獻傳遞給fread()
+0

在步驟3中,我如何才能獲得對其中一部分的參考? – jackcogdill

+0

Nvm我明白了。謝謝。 – jackcogdill

0

定義自己的數據格式存儲:

<uint64_t datalength><string name><char[datalength] contents> 

或者更容易在應用程序內使用:

struct named_file { 
    char* contents; 
    uint64_t datasize; 
    char name[]; // contents begin directly after the name. 
} 
  1. 分配有足夠的空間結構:的sizeof(named_file)+ strlen的( _name)+ 1 + _datasize
  2. strcpy(name,_name)
  3. contents = name + strlen(name)+1
  4. 將數據保存到內容指針。 memcpy(),直接閱讀,不管。