Andrey Zet
Andrey Zet

Reputation: 556

Swift: How to convert a String to UInt8 array?

How do you convert a String to UInt8 array?

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

Upvotes: 47

Views: 52233

Answers (4)

Deepak Tagadiya
Deepak Tagadiya

Reputation: 2237

swift 4

 func stringToUInt8Array(){

     let str:String = "Swift 4"
     let strToUInt8:[UInt8] = [UInt8](str.utf8)

     print(strToUInt8)
 }

Upvotes: 4

Dan Rosenstark
Dan Rosenstark

Reputation: 69767

I came to this question looking for how to convert to a Int8 array. This is how I'm doing it, but surely there's a less loopy way:

Method on an Extension for String

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

Note: storing a UTF-16 encoded character (2 bytes) in an Int8 (1 byte) will lead to information loss.

Upvotes: 0

Airspeed Velocity
Airspeed Velocity

Reputation: 40965

Lots of different ways, depending on how you want to handle non-ASCII characters.

But the simplest code would be to use the utf8 view:

let string = "hello"

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

Note, this will result in multi-byte characters being represented as multiple entries in the array, i.e.:

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

prints out [195, 169]

There’s also .nulTerminatedUTF8, which does the same thing, but then adds a nul-character to the end if your plan is to pass this somewhere as a C string (though if you’re doing that, you can probably also use .withCString or just use the implicit conversion for bridged C functions.

Upvotes: 78

Michael Dorner
Michael Dorner

Reputation: 20155

let str = "test"
let byteArray = [UInt8](str.utf8)

Upvotes: 13

Related Questions