我正在生成用於模擬網絡的單元測試中的二進制文件。通過網絡發送的一些數據採用小端模式或大端模式,我想用存根模擬這些數據並創建二進制文件。因此,換句話說,我將生成二進制文件,其中包含我期望從網絡套接字獲得的等效數據的二進制文件,而不是使用活動網絡進行單元測試。將float數組轉換成little/big endian
我正在使用Python 2.7來生成字節數組並將它們保存到文件中,但我無法將我的float數組轉換爲little endian模式。
from array import array
output_file = open(r"C:\temp\bin.dat", "wb")
float_array = array('d', [1, 1.2, 0.34, 9.8, 0.13, 1.1, 0.88, 72])
float_array.byteswap(); #This doesn't convert it to little endian!
float_array.tofile(output_file)
output_file.close()
所以我不知道是否有人知道如何關閉如何操縱數組,這樣當我做float_array.tofile()
它會在小/大端模式寫入二進制數據。
該代碼給出了以下的輸出:
Val = 8.6184E-41
Val = 0.0
Val = 4.1897916E-8
Val = 4.172325E-8
Val = -1.9212016E-29
Val = -490.3153
Val = -1.5834067E-23
不匹配的希望array('d', [1, 1.2, 0.34, 9.8, 0.13, 1.1, 0.88, 72])
當我註釋掉byteswap
方法,我得到以下
Val = 0.0
Val = 1.875
Val = 4.172325E-8
Val = 1.9
Val = 1.9023206E17
Val = 1.67
Val = -1.5881868E-23
然而,在真實的網絡模式下,它的效果很好。但是這對單元測試沒有幫助!
我很困惑。你在哪裏得到那些Val = 0.0的線?當我運行你的代碼時,我得到的是二進制文件,而不是那種格式的東西。如果不交換,前8個字節是'0,0,0,0,0,0,240,63',如果交換,則爲'63,240,0,0,0,0,0,0'。有沒有可能這些文件編寫得很好,但是用來讀取它們並顯示它們和/或重新排列的代碼 - 如果它們(您沒有向我們顯示)是錯誤的? – abarnert 2013-05-08 21:58:14