【问题标题】:Swift: How to convert a String to UInt8 array?Swift:如何将字符串转换为 UInt8 数组?
【发布时间】:2015-05-15 08:56:32
【问题描述】:

如何将 String 转换为 UInt8 数组?

var str = "test"
var ar : [UInt8]
ar = str

【问题讨论】:

    标签: swift


    【解决方案1】:

    有很多不同的方法,具体取决于您要如何处理非 ASCII 字符。

    但最简单的代码是使用utf8 视图:

    let string = "hello"
    
    let array: [UInt8] = Array(string.utf8)
    

    注意,这将导致多字节字符表示为数组中的多个条目,即:

    let string = "é"
    print(Array(string.utf8))
    

    打印出[195, 169]

    还有.nulTerminatedUTF8,它做同样的事情,但是如果你的计划是将它作为C字符串传递到某个地方,那么它会在末尾添加一个空字符(尽管如果你这样做,你可能也可以使用 .withCString 或只使用桥接 C 函数的隐式转换。

    【讨论】:

      【解决方案2】:
      let str = "test"
      let byteArray = [UInt8](str.utf8)
      

      【讨论】:

        【解决方案3】:

        斯威夫特 4

         func stringToUInt8Array(){
        
             let str:String = "Swift 4"
             let strToUInt8:[UInt8] = [UInt8](str.utf8)
        
             print(strToUInt8)
         }
        

        【讨论】:

          【解决方案4】:

          我来这个问题是为了寻找如何转换为 Int8 数组。我就是这样做的,但肯定有一种不那么循环的方式:

          String 的扩展方法

          public func int8Array() -> [Int8] {
              var retVal : [Int8] = []
              for thing in self.utf16 {
                  retVal.append(Int8(thing))
              }
              return retVal
          }
          

          注意:将 UTF-16 编码的字符(2 字节)存储在 Int8(1 字节)中会导致信息丢失。

          【讨论】:

          • 你不应该将 Int16 用于 utf16 吗?
          • @marosoaie 那也很好。取决于您要达到的目标。令人惊讶的是,INT8_MAX 只有 127,这是我以前听说过和使用过的数字,所以这很可怕。如果我可以选择让 iOS 解决问题,我可能会选择 Int
          • 问题是int8是1字节,utf16字符是2字节。在 int8 中存储一个 utf16 字符会导致信息丢失和数据损坏。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-13
          • 1970-01-01
          • 2017-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多