我正在使用TStream来读取二进制数据(感谢这篇文章:How to use a TFileStream to read 2D matrices into dynamic array?)。如何转换Big Endian以及如何翻转最高位?
我的下一个问题是数据是Big Endian。从我的阅读中,Swap()方法似乎被弃用。我将如何交换下面的类型?
16-bit two's complement binary integer
32-bit two's complement binary integer
64-bit two's complement binary integer
IEEE single precision floating-point - Are IEEE affected by Big Endian?
最后,因为数据是无符号的,该数据集的创造者所储存的无符号值作为符号整数(不包括IEEE)。他们指示只需要添加偏移量(2^15,2^31和2^63)来恢复未签名的数据。但是,他们指出,翻转最重要的位是最快的方法。如何有效地翻转16,32或64位整数的最高有效位?
所以,如果在磁盘上(16位)的数据是“85 FB” - 读取数据和交换和位翻转将是1531
后所期望的结果是否有办法来完成交换并有点翻转泛型,所以它适合上面链接的通用答案?
是的,孩子们,这是NASA,ESO和所有专业天文学家如何存储科学的天文数据。这个FITS标准被有些人认为是它在扩散和灵活性方面创造的最成功的标准之一!
...什么?你是如何得到1531而不是7b85的? – 2010-05-21 13:46:34
是的,我也得到了7B 85,其中十进制是31621. – 2010-05-21 13:52:02
1531 = $ 85FB xor $ 8000 – kludg 2010-05-21 14:05:52