我在编写程序时遇到问题,该程序验证HDF5版本2文件的超级块中的校验和。我没有使用HDF5软件,但我的代码中有一份H5_checksum_fletcher32(来自HDF5 H5checksum.c)。
我可以假设文件签名块位于0位置。
我的逻辑是:
Let offset = the value of byte 9 of the file.
The superblock spans bytes 0 to (15+4*offset).
The last 4 bytes are the checksum as an unsigned int.
The checksum should equal H5_checksum_fletcher32 applied to bytes 0 to (11+4*offset).
我已经将这个逻辑应用于NOAA的几个我认为可靠的测试文件,但校验和永远不会匹配H5_checksum_fletcher32的结果。超级块中的其他值似乎是正确的。谁能看到我逻辑上的缺陷?
答案 0 :(得分:1)
来自HDF5 file format specification:
格式中使用的所有校验和都是使用Jenkins' lookup3算法计算的。
这在H5checksum.c
H5_checksum_lookup3()
中提供。
实际上,调用的正确例程似乎是H5_checksum_metadata()
,但这只是使用宏调用H5_checksum_lookup3()
。