我在写一个uint32_t
值到文件并读回来时遇到了问题。 为了写入到文件中,我使用在读取保存在文件中的uint32_t变量时出错
uint32_t num = 2036465665 ;
FILE *fp = fopen("test.dat", "w");
fprintf(fp,"value = %" PRIu32 "\n", num);
fclose(fp);
为了读取它,我第一文件中的内容复制到一个数组data[]
,然后通过线提取值线。
int len = 100;
char *line = malloc(len * sizeof(char));
char field[256], tmp[2];
FILE *fp = fopen("test.dat", "r");
while (-1 != getline(&line, &len, fp)){
char *value=malloc(sizeof(char)*256);
sscanf(line, "%s %s %s", field, tmp, value);
data[i] = value;
i++;
}
fclose(fp);
读取uint32_t的变量的值,我得到不同的价值观与atoi
和strtoul
与不同的基础,但不是精确值写入文件。
uint32_t read_num;
read_num = strtoul (data[0], NULL, 32);
这给read_num的价值为1345324165.
read_num = (uint32_t) atoi(data[0]);
给人3226523632
我如何保存在文件中正确的值。 (i)是否使用sscanf
将文件内容读入字符串或(ii)strtoul
vs atoi
(iii)基于strtoul()
中的错误。
strtoul(data [0],NULL,32); - 你的基数是32?我会查找如何正确使用此功能;基于我已经瞥了一眼应该是10,而不是32. – MateoConLechuga
另外,我会建议使用EOF而不是-1作为getline的返回检查。 – MateoConLechuga
@MateoConLechuga:实际上,在POSIX中定义了['getline()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)来返回-1而不是'EOF',所以使用'-1'是正确的。 –