Jednym z możliwych rozwiązań (objaśnienia "inline"):
let charAsString = "1f44d"
// Convert hex string to numeric value first:
var charCode : UInt32 = 0
let scanner = NSScanner(string: charAsString)
if scanner.scanHexInt(&charCode) {
// Create string from Unicode code point:
let str = String(UnicodeScalar(charCode))
println(str) //
} else {
println("invalid input")
}
Nieco prostsze z Swift 2:
let charAsString = "1f44d"
// Convert hex string to numeric value first:
if let charCode = UInt32(charAsString, radix: 16) {
// Create string from Unicode code point:
let str = String(UnicodeScalar(charCode))
print(str) //
} else {
print("invalid input")
}
Należy również zauważyć, że nie wszystkie punkty kodowe są poprawnymi skalarami Unicode, porównaj Validate Unicode code point in Swift.
Aktualizacja Swift 3:
public init?(_ v: UInt32)
jest teraz failable initializer z UnicodeScalar
i sprawdza, czy dana wejściowa numeryczny jest prawidłową wartością skalarną Unicode:
let charAsString = "1f44d"
// Convert hex string to numeric value first:
if let charCode = UInt32(charAsString, radix: 16),
let unicode = UnicodeScalar(charCode) {
// Create string from Unicode code point:
let str = String(unicode)
print(str) //
} else {
print("invalid input")
}
Krótka wersja konwersja ciąg szesnastkowy jak "1f44d" do int: 'Int (strtoul (charAsString Nil, 16))' – yesman82