bitfield와 unsigned char * (나중에 할당 됨)가있는 사용자 정의 구조를 테스트하고 있습니다. 나는 진수의 파일 내부에이 구조체를 저장하려고 할 때bitfields와 char이있는 fwrite/fread 구조체 *
struct test {
unsigned int field1 : 1;
unsigned int field2 : 15;
unsigned int field3 : 32;
unsigned int dataLength : 16;
unsigned char * data;
}
문제는 다음과 같습니다
는 구조입니다. 예를 들어:
그래서int readAnStructFromFile(struct test *ptr, FILE *f) {
// probably wrong
fread(ptr->field1, sizeof(unsigned int), 1, f);
}
, 내가 쓸 수있는 방법/이런 구조체를 읽어
int writeStruct(struct test *ptr, FILE *f) {
// for data, suppose I know the length by dataLength :
// this throw me : cannot take adress of bit field
int count;
count = fwrite(&(ptr->field2), sizeof(unsigned int), 1, f);
// this throw me : makes pointer to integer without a cast
count = fwrite(ptr->field2, sizeof(unsigned int), 1, f);
// same for length
count = fwrite(htons(ptr->data) , ptr->dataLength, 1,f);
// so , how to do that ?
}
같은 문제가 FREAD에 간다? 이러한 비트 필드가 아니었다면 당신의 도움 FREAD에 대한
PS에 대한
덕분에,이 일할 수 : How to fread() structs?
field1''에 대한 비트 필드를 사용하고 표준 비트 아니기 때문에'field2'이, 이해하는 것 같지만 -widths를 사용하면'field3'과'dataLenght'에 대해서는 의미가 없습니다. 각각'uint32_t'와'uint16_t'를 사용할 수 있습니다. 그리고 메모리가 부족한 시스템에 있지 않다면 다른 데이터 구조 (네트워크 패킷, 데이터 패킷, 네트워크 패킷)와 일치시키지 않는 한 비트 필드가 필요하지 않으며 (종종 'data_type' 디스크상의 구조 등). –
몇 가지 경우를 처리하는 예입니다 :). 사용자 정의 네트워크 패킷을 만들려고 시도했습니다 ^^ – jy95
파일을 이진 형식으로 저장해야합니까? 왜 'son슨'과 같은 것이 아닌가? 'fscanf'와'fprintf'를 사용하여 일관된 파일 텍스트 구조로 인해 다시 읽는 것이 더 쉬울 것입니다. – AmeyaVS