如何在Swift中将Int转换为4字节的字节数组?

时间:2019-07-10 05:43:58

标签: swift byte

我正在使用Swift,并尝试将Int(例如:-1133)转换为4个字节的字节数组。我能够将Int转换为8个字节的数组(-1333变为[255、255、255、255、255、255、250、203]),但我需要将其设为4个字节。我知道可以使用其他语言(例如Java)来做到这一点,但是Swift可以解决吗?这是我的代码:(我使用了THIS答案)

func createByteArray(originalValue: Int)->[UInt8]{
        var result:[UInt8]=Array()

            var _number:Int = originalValue

            let mask_8Bit=0xFF

            var c=0
            var size: Int = MemoryLayout.size(ofValue: originalValue)
            for i in (0..<size).reversed(){
                //at: 0 -> insert at the beginning of the array
                result.insert(UInt8( _number&mask_8Bit),at:0)
                _number >>= 8 //shift 8 times from left to right
            }

        return result
    }

1 个答案:

答案 0 :(得分:1)

在Java中,整数始终为32位,但在Swift中,可以为32位或64位,具体取决于平台。您的代码在8位字节的64位平台上创建与Int类型的字节数组大小相同的字节数组。

如果要将转换限制为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]