В Java целое число всегда 32-разрядное, но в Swift оно может быть 32-разрядным или 64-разрядным, в зависимости от платформы. Ваш код создает массив байтов того же размера, что и тип Int
, на 64-битной платформе размером 8 байтов.
Если вы хотите ограничить преобразование 32-разрядными целыми числами, тогда используйте Int32
вместо Int
, тогда результатом будет массив из 4 байтов, независимый от платформы.
Альтернативный метод преобразования:
let value: Int32 = -1333
let array = withUnsafeBytes(of: value.bigEndian) { Array($0) }
print(array) // [255, 255, 250, 203]
Или как универсальная функция для целочисленного типа всех размеров:
func byteArray<T>(from value: T) -> [UInt8] where T: FixedWidthInteger {
return withUnsafeBytes(of: value.bigEndian) { Array($0) }
}
Пример:
print(byteArray(from: -1333)) // [255, 255, 255, 255, 255, 255, 250, 203]
print(byteArray(from: Int32(-1333))) // [255, 255, 250, 203]
print(byteArray(from: Int16(-1333))) // [250, 203]