如何在Swift中将Unicode字符转换为整数

18 浏览
0 Comments

如何在Swift中将Unicode字符转换为整数

有用户向我的回答之一提出了以下问题:用户问

我有一个 Unicode 字符\u{0D85}。如何获取它的Int值?

我本来想提供另一个 Stack Overflow 的问题和答案的链接,但是我找不到相关的问题。这些链接涉及的是反向转换:

而这些问题似乎是在询问如何将字符串形式的数字转换为实际的Int(例如将"1"转换为1):

与其试图在评论中回答提问者,我将在下面给出一个答案。对于\u{0D85}的类型有些不清楚,但我将涵盖各种可能性。

0
0 Comments

在Swift 5中,Unicode.Scalar有一个value属性,用于表示Unicode字符的数值。value属性的定义如下:

var value: UInt32 { get }

下面的示例代码展示了如何遍历Character或String的unicodeScalars属性,并打印每个Unicode字符的Int32值:

let char: Character = "\u{0D85}"

for scalar in char.unicodeScalars {

print(scalar.value)

}

/*

prints: 3461

*/

let str: String = "\u{0D85}"

for scalar in str.unicodeScalars {

print(scalar.value)

}

/*

prints: 3461

*/

这段代码的目的是将Unicode字符转换为Int值。代码通过遍历字符或字符串的unicodeScalars属性,获取每个字符的Unicode.Scalar,然后打印其value属性。这样就可以将Unicode字符转换为Int值。

0
0 Comments

如何在Swift中将Unicode字符转换为Int

问题的出现原因:Unicode字符在Swift中以不同的形式存在,例如十六进制、字符串和字符。因此,需要针对不同形式的Unicode字符进行不同的转换方法。

解决方法:

1. 十六进制转Int:如果已知Unicode字符的十六进制值,可以直接将其写成0x开头的形式,因为它已经是一个Int了。

let myInt = 0x0D85 // Int: 3461

2. 字符串转Int:如果Unicode字符以字符串形式存在(带双引号),则默认为String类型。由于它是一个字符串,无法确定在一般情况下是否只有一个Int值。

let myString = "\u{0D85}"

for element in myString.unicodeScalars {

let myInt = element.value // UInt32: 3461

}

3. 字符转Int:Swift的Character是扩展的图形簇,没有utf16或unicodeScalars属性,因此如果从Character开始,则需要先将其转换为String,然后按照上面的字符串转Int部分的方法进行转换。

let myChar: Character = "\u{0D85}"

let myString = String(myChar)

对于Int到Character或String的转换,请参考此答案:stackoverflow.com/a/31284539

需要注意的是,Swift的Character现在具有unicodeScalars属性,可以参考Imanou Petit的答案来进行转换。

0