我目前正在开发一个 Objective C 程序,它接收 UTF-8 字符的输入作为字符串,如“U+0008”。这些字符串是 NSString 类型的。现在我需要将这个代表这个字符的字符串转换为对应的 UniChar (0x0008)。
你知道这样做的优雅方式吗?
谢谢!佩德罗
我目前正在开发一个 Objective C 程序,它接收 UTF-8 字符的输入作为字符串,如“U+0008”。这些字符串是 NSString 类型的。现在我需要将这个代表这个字符的字符串转换为对应的 UniChar (0x0008)。
你知道这样做的优雅方式吗?
谢谢!佩德罗
如果你有一个xNSString
是十六进制数字的形式@"U+xxxx"
,那么下面是两种获取值的方法,每种方法的“优雅”都在旁观者的眼中:
一)使用NSScanner
。该方法scanString:intoString
可用于检查 ,U+
读取scanHexInt:
十六进制值的方法,以及isAtEnd
检查十六进制值后是否没有任何内容的方法。此方法不将十六进制数限制为最多四位数字。
b) 使用sscanf
或strtol
。这些是 C 级 API,您可以从NSString
using获取 C 字符串UTF8String
。scanf
您可以检查并U+
读取一个十六进制数字,其中一行中设置了最大位数 - 如果这是您对“优雅”的定义。然而,检查所有输入是否被消耗需要一点思考。
还有许多其他方法可以做到这一点,从自己滚动到使用正则表达式 ( NSRegularExpression
) 检查格式并一次性提取 4 个十六进制数字以准备转换为整数。
请注意,如果您看到 4 个十六进制数字,那么您有一个 16 位的值,更像 UTF-16 而不是 UTF-8。