У меня есть двоичный файл, выгруженный в массив char.Некоторая часть файла может быть связана с struct s1
.В зависимости от значения в struct1
, будет еще N
байт, прежде чем можно будет назначить другой struct struct2
.Я хочу прочитать эти N байтов в другой массив и передать их в другом месте, но я не понял, как это сделать.Ниже моя попытка.
#include <stdlib.h>
#include <stdio.h>
struct s1{
int x;
int y;
int N;
};
int main(){
FILE *fp;
fp = fopen("myfile.xyz", "rb");
fseek(fp, 0, SEEK_END);
int sz = ftell(fp);
fseek(fp, 0, SEEK_SET);
// Populate buffer
unsigned char buffer[sz];
fread(buffer, sz, 1, fp);
char *pos = (char*) buffer; // current pos pointer to file buffer
// map s1, starting at pos
struct s1 *s1 = (struct s1*) pos;
// extra code parsing of s1...
pos += sizeof(struct s1); // increment pointer to after struct
int N = 10; // should be read from s1 (i.e. it is not(!) a static number)
char *temp = (char*) malloc((N+1)*sizeof(char));
// assign temp to be N bytes, starting at pos...
// parse_temp(temp);
pos += N;
free(temp);
return 0;
};
Я попытался создать цикл for следующим образом, чтобы заполнить temp
:
for(int i=0; i<N; i++){
*temp[i] = (char *) (pos+i); //both temp[i] and *temp[i]...
};
, но ни одна из версий не компилируется.Похоже, что этот подход отрицает идею простого сопоставления массива таким же образом, как и для структуры, поскольку temp
- это новый блок памяти, не использующий «указатель на необработанную память» - думаю, я надеюсь, чтовыполняется приведение структуры.
Я медленно изучаю c
, так что это может быть тривиальный вопрос с правильными поисковыми терминами ...