ios - Swift 3 - 如何将 Int32 的内存转换为四个字符

标签 ios swift swift3 core-audio int32

我想将 Int32 转换为由四个 C 风格的 1 字节宽字符组成的字符串(可能与 this 密切相关,但在 Swift 3 中).

这样做的用途是,Core Audio 的许多 API 函数返回一个 OSStatus(实际上是一个 Int32),它通常可以解释为由四个 C- 组成的字符串样式字符。

fun interpretAsString(possibleMsg: Int32) -> String {
  // Blackbox
}

最佳答案

实际上“四字符代码”通常是无符号 32 位 值:

public typealias FourCharCode = UInt32
public typealias OSType = FourCharCode

四个字节(从 MSB 到 LSB)各定义一个字符。 这是一个简单的 Swift 3 函数,用于将整数转换为字符串, 受到各种 C/Objective-C/Swift 1+2 解决方案的启发 iOS/C: Convert "integer" into four character string :

func fourCCToString(_ value: FourCharCode) -> String {
    let utf16 = [
        UInt16((value >> 24) & 0xFF),
        UInt16((value >> 16) & 0xFF),
        UInt16((value >> 8) & 0xFF),
        UInt16((value & 0xFF)) ]
    return String(utf16CodeUnits: utf16, count: 4)
}

例子:

print(fourCCToString(0x48454C4F)) // HELO

我选择了一个包含 UTF-16 代码点的数组作为中间存储,因为它可以直接用于创建字符串。

如果你真的需要它作为一个 signed 32 位整数,那么你可以 打电话

fourCCToString(FourCharCode(bitPattern: i32value)

或定义一个采用 Int32 参数的类似函数。

正如 Tim Vermeulen 在下面建议的那样,UTF-16 数组也可以是 使用 map 创建:

let utf16 = stride(from: 24, through: 0, by: -8).map {
    UInt16((value >> $0) & 0xFF)
}

let utf16 = [24, 16, 8, 0].map { UInt16((value >> $0) & 0xFF) }

除非该功能对您的应用程序性能至关重要, 选择你觉得最熟悉的(否则测量和比较)。

关于ios - Swift 3 - 如何将 Int32 的内存转换为四个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42581256/

相关文章:

ios - 如何根据多个 Core Data 属性的计算值进行排序

ios - 以编程方式将 UIImageView 添加到 UIScrollView

ios - 如何设置重复本地通知的开始和结束时间?

ios - 以编程方式快速更新约束

ios - 无法在自定义 TableView 单元格中加载图像

ios - 如何弹出导航 Controller ?

iOS - 如何在 swift 中使用 `NSMutableString`

ios - 在 ViewController 中快速更改导航栏

ios - 如何在 Objective C 项目中使用 ALCameraViewController 库

swift3 - 我正在尝试导入 GoogleAPIClient 或 GoogleAPIClientForREST