所以我的问题是:我需要从我使用的文件中获取一些原始值(浮点数),并用Java解析为我的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
的返回值并返回正确的值(numData)。我检查了网站上的其他问题,但我没有真正发现我的问题。其他的有问题,比如他们在文件末尾设置了fseek
的文件指示符,当他们得到所有的零。我想它也不能成为endianess问题因为我认为我会得到不好的价值而不是零。我在Windows 7上使用Visual C ++ 2008 Express版。
对不起我的格式和英语,这是我的第一个问题。我会感谢任何帮助。
答案 0 :(得分:0)
看起来你按照相反的顺序(http://en.cppreference.com/w/c/io/fread)
放置大小和数量size_t fread(void *ptr, size_t size, size_t count, FILE *stream)
如果读取了部分元素,则其值为不确定
答案 1 :(得分:0)
所以我终于解决了。问题一直是在结束时。我无法看到它,因为我读的值是Denormal numbers,我的编译器默认将它们视为零。所以我在Java中切换字节顺序以生成新的二进制文件以在C中使用,它工作正常。