我正在使用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