我正在用 C 将结构写入二进制文件。char* 项和 uint8 项写得很好,但我似乎在编写 uint32 项时遇到了问题。
我的写作代码在这里。
void writeOut(record *data){
FILE *fp = fopen("output.bin","w");
int i =0;
while(data[i].Name != NULL){
fwrite(data[i].Name, NAME_LEN ,1,fp);
fwrite(&data[i].Value1, sizeof(uint8_t) ,1,fp);
fwrite(&data[i].Value2, sizeof(uint8_t) ,1,fp);
fwrite(&data[i].Id, sizeof(uint32_t) ,1,fp);
fwrite(data[i].Text, TEXT_LEN ,1,fp);
i++;
}
}
对于记录一(十六进制),我的二进制文件看起来像这样(使用“|”来显示指向字段的结尾):
52 6F 64 27 72 6F 64 00 00 00 00 00 00 00 00 00 00 | 01 | 04 | 72 92 01 00 | 50 72 6F 6A 65 63 74 20 50 65 61 63 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
或在十二月
082 111 100 039 114 111 100 000 000 000 000 000 000 000 000 000 000 | 001 | 004 | 114 146 001 000 | 080 114 111 106 101 099 116 032 080 101 097 099 101 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
问题出在“72 92 01 00”或“114 146 001 000”块中。它打算包含的数字是“103026”
那里的任何人都知道我在哪里出错了吗?
mods注意:不确定我选择的标签,欢迎调整。
- - - - 更新 - - - -
感谢您对 bin 文件的输入。好的,因为它写得正确,我一定是读错了。
这是我阅读的摘录
int populateRecordSet(unsigned int pageSize, FILE *recordFile, record** record_set){
// read in data
unsigned char data[RECORD_LEN * pageSize];
int numOfRecords = fread(data, RECORD_LEN, pageSize, recordFile);
// convert to records
int r_pos; //note r_pos is used to show the starting point of a record in the context of the binary file
int i;
uint32_t test;
for(i=0; i < numOfRecords; i++) {
r_pos = i * RECORD_LEN;
memcpy(record_set[i]->Name, data + r_pos, NAME_LEN);
//ADD NULL AT END JUST IN CASE
record_set[i]->Name[NAME_LEN] = '\0';
record_set[i]->Species = *(data + r_pos + (NAME_LEN));
record_set[i]->Class = *(data + r_pos + (NAME_LEN+SPECIES_LEN));
//record_set[i]->Id = *(data + r_pos + (NAME_LEN+SPECIES_LEN+CLASS_LEN));
test = *(data + r_pos + (NAME_LEN+SPECIES_LEN+CLASS_LEN));
printf("%s::%"PRIu32, record_set[i]->Name,test);
getchar();
memcpy(record_set[i]->Guild, data + r_pos + (NAME_LEN+SPECIES_LEN+CLASS_LEN+ID_LEN), GUILD_LEN);
record_set[i]->Guild[GUILD_LEN] = '\0';
}
getchar();
return i;
}
它在我看来是正确的,它适用于除“Id”之外的所有值
再一次,有什么见解吗?