我目前正在開發一個Objective C程序,它接收以「U + 0008」字符串形式輸入的UTF-8字符。這些字符串是NSString類型的。現在我需要將表示此字符的字符串轉換爲相應的UniChar(0x0008)。將UTF-8字符串轉換爲整數值/ UniChar(目標C)
你知道這樣做的優雅方式嗎?
謝謝! 佩德羅
我目前正在開發一個Objective C程序,它接收以「U + 0008」字符串形式輸入的UTF-8字符。這些字符串是NSString類型的。現在我需要將表示此字符的字符串轉換爲相應的UniChar(0x0008)。將UTF-8字符串轉換爲整數值/ UniChar(目標C)
你知道這樣做的優雅方式嗎?
謝謝! 佩德羅
如果你有形式@"U+xxxx"
的NSString
其中X是十六進制數字然後下面有兩種方式獲得的價值,在旁觀者的眼中的「優雅」各是:
a)使用NSScanner
。可以使用方法scanString:intoString
檢查U+
,方法scanHexInt:
讀取十六進制值,並使用方法isAtEnd
檢查十六進制值後面什麼也沒有。此方法不會將十六進制數限制爲最多四位數。使用sscanf
或strtol
。這些是C級API,您可以使用UTF8String
從NSString
獲取C字符串。使用scanf
,您可以檢查U+
,並在一行中以十六進制數字讀取設定的最大位數 - 如果這是您對「優雅」的定義。然而,檢查所有輸入消耗需要一點思考。
有許多其他方法可以做到這一點,從roll-your-own到使用正則表達式(NSRegularExpression
)來檢查格式,並一次性提取4個十六進制數字以準備轉換爲整數。
注意,如果你看到4個十六進制數字,那麼你有一個16位的值,比UTF-8更像UTF-16。
爲什麼你收到他們作爲一個字符串? – Wain