2014-04-14 2 views
1

В C Читаю двоичные данные из файла в вар data так:Подготовить к знаку без знака в C?

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

Я хочу предварять вар 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(), прямое чтение, что угодно.
Смежные вопросы