gpt4 book ai didi

ios - 如何将 UInt32 转换为 UInt8

转载 作者:可可西里 更新时间:2023-11-01 01:06:51 26 4
gpt4 key购买 nike

我需要快速将 UInt32 附加到 NSMutableData 对象。问题是,我不知道如何访问 int 中的特定字节。

这是我尝试过的:

extension NSMutableData {

enum Endianness {
case LittleEndian, BigEndian
}

func appendUInt32(myInt: UInt32, endianness: Endianness = .LittleEndian) {
var bytes = UInt8[]()
for i in 0..sizeof(UInt32) {
switch endianness {
case .LittleEndian:
bytes.append(UInt8(myInt >> i))
case .BigEndian:
bytes.append(UInt8(myInt >> (sizeof(UInt32) - 1 - i)))
}
}
self.appendBytes(bytes, length:bytes.count)
}
}

这会引发编译器异常,我无法将其从 UInt32 转换为 UInt8。有没有一种简单的方法可以简单地访问 UInt32 中的一个字节?

编辑:从评论中总结最终解决方案:

extension NSMutableData {

enum Endianness {
case LittleEndian, BigEndian
}

func appendUInt32(myInt: UInt32, endianness: Endianness = .LittleEndian) {
var bytes = UInt8[]()
for i in 0..sizeof(UInt32) {
switch endianness {
case .LittleEndian:
bytes.append(UInt8(myInt >> UInt32(i * 8) & UInt32(0xff)))
case .BigEndian:
bytes.append(UInt8(myInt >> UInt32((sizeof(UInt32) - 1 - i) * 8) & UInt32(0xff)))
}
}
self.appendBytes(bytes, length:bytes.count)
}
}

最佳答案

确保 >>> 运算符的两个操作数属于同一类型。我将它们设为 UInt32。

extension NSMutableData {

enum Endianness {
case LittleEndian, BigEndian
}

func appendUInt32(myInt: UInt32, endianness: Endianness = .LittleEndian) {
var bytes = UInt8[]()
for i in 0..sizeof(UInt32) {
switch endianness {
case .LittleEndian:
bytes.append(UInt8(myInt >> UInt32(i)))
case .BigEndian:
bytes.append(UInt8(myInt >> UInt32((sizeof(UInt32) - 1 - i))))
}
}
self.appendBytes(bytes, length:bytes.count)
}
}

关于ios - 如何将 UInt32 转换为 UInt8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481538/

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