我正在尝试从文件中读取二进制数据,将其转换为double类型的数字并将其打印到屏幕上。我可以使用它来处理字节和整数数据,但是当我尝试将其转换为双精度数时,我得到的只是0。应该是double类型的数量为0,但二进制形式的数字不是零。
int input_fd = open("nameoffile",O_RDONLY);
size_t ret_in;
char buffer = 0;
while((ret_in = read (input_fd,&buffer,sizeof(double)*1)) >0){
printf("%f ", (double)buffer);
}
printf("\n");
close(input_fd);
正如我所说,当我使用sizeof(int)* 1和(int)缓冲区以及字节数据而不是双数据时,这适用于整数。
答案 0 :(得分:2)
您正在使用1字节宽的缓冲区。由于您正在阅读int
并将其复制到sizeof(int)
缓冲区,因此它与sizeof(char)
“合作”这一事实只是误报。
如果您想阅读double
,请使用double作为目标缓冲区,例如:
double buffer;
while((ret_in = read (input_fd, &buffer, sizeof(double))) >0) {
printf("%f ", (double)buffer);
}