2017-07-17 88 views
0

我有一個Java服務器,我將其轉換爲short[],然後將它轉換爲byte[](Big Endian),然後將它發送到iOS設備。我無法將此字節數組(或Swift中的Data)轉換爲int16數組([Int16])。我還想知道,如果我認爲Swift中Java short類型的Swift等價物是Int16是否正確。將Swift數據轉換爲Int16

+0

這可能有所幫助:https://stackoverflow.com/questions/38023838/round-trip-swift-number-types-to-from-data。 –

+0

java'short'和swift'Int16'都是16位有符號整數。所以是的,他們是相同的。 – litelite

+0

@MartinR感謝您的鏈接,雖然這不是我正在尋找的。 –

回答

1

同樣在round trip Swift number types to/from Data可以使用withUnsafeBytes 方法和UnsafeBufferPointer<Int16>獲取數據的視圖 16位整數。然後使用Int16(bigEndian:)初始化程序將 中的數字從大端數轉換爲主機字節數。例如:

let data = Data(bytes: [0, 1, 0, 2, 1, 0, 255, 255]) 
let i16array = data.withUnsafeBytes { 
    UnsafeBufferPointer<Int16>(start: $0, count: data.count/2).map(Int16.init(bigEndian:)) 
} 
print(i16array) // [1, 2, 256, -1]