java - fread() 读取零值

标签 java c visual-c++ fread

所以我的问题是:我需要从我在Java中使用和解析的文件中获取一些原始值( float )到我的C代码(Java和C实现之间的测试)。因此,在 Java 中,我使用 ByteBuffer.allocate() 来获取字节,并使用 Files.write() 将它们写入文件中。文件看起来不错,我用十六进制编辑器检查了他(真实值,不仅仅是零)。现在在 C 中,用于读取我使用的数据:

float * floatArray = malloc(numData * sizeof(float)); //numData is int, 1000 for example
FILE * stream = fopen(input, "rb"); //input is the name of my binary file
rewind(stream);
fread(floatArray, numData, sizeof(float), stream);
fclose(stream);

用于测试:

for(i = 0; i < 128; i++) {
    printf("%f, ", floatArray[i]);
}

但我唯一看到的是

0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, + next 114 zeros

了解更多详情:

输入文件大约有 158 MB。它实际上有很多零,但例如,前 3 个数字应该是 9、52 和 29。另一件事是我已经检查了 fread 的返回值,它返回了正确的值(数据数)。我检查了网站上的其他问题,但没有真正找到我的问题。其他人则遇到了问题,例如当他们得到所有零时,他们在文件末尾使用 fseek 设置文件指示器。我想这也不可能是字节顺序问题,因为我认为我会得到不好的值,而不仅仅是零。我在 Windows 7 上使用 Visual C++ 2008 Express 版本。

抱歉我的格式和英语,这是我的第一个问题。我将非常感谢任何形式的帮助。

最佳答案

看起来您以相反的顺序放置了尺寸和数量 ( http://en.cppreference.com/w/c/io/fread )

size_t fread(void *ptr, size_t size, size_t count, FILE *stream)

如果读取部分元素,其值是不确定的

关于java - fread() 读取零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26976337/

相关文章:

c++ - 使用 C++ 的 OpenGL 中的动画点?

java - 持久化 JPA 域对象的良好设计

java - 我的 TCP 客户端-服务器模板做错了什么?

c - 如何在C中将负零转换为正零?

C宏未声明

c++ - 欧拉角到 GlRotatef

java - 在java中打印hex文件

Java - Servlet post 参数编码错误

c - 分配大量文件描述符

c++ - 找到小行星的最近位置c++