gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:09:05 24 4
gpt4 key购买 nike

我正在使用 Swift 并尝试将 Int(例如:-1333)转换为 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
}

最佳答案

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

如果要将转换限制为 32 位整数,请使用 Int32而不是 Int ,结果将是一个 4 字节的数组,与平台无关。

另一种转换方法是

let value: Int32 = -1333
let array = withUnsafeBytes(of: value.bigEndian, Array.init)
print(array) // [255, 255, 250, 203]

或者作为所有大小的整数类型的通用函数:
func byteArray<T>(from value: T) -> [UInt8] where T: FixedWidthInteger {
withUnsafeBytes(of: value.bigEndian, Array.init)
}

例子:
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]

关于swift - 如何在 Swift 中将 Int 转换为 4 个字节的字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56964045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com