![](/img/trans.png)
[英]CoreGraphics - Can't replace UnsafeMutablePointer<UInt32> with UnsafeMutablePointer<UInt8>
[英]How to cast UInt32 to UInt8
我需要迅速将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)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.