2015-06-13 2 views
0

Теперь у меня есть ряд номеров юникода, я хочу показать их в UILabel, я могу показать их, если я их жестко закодировал, но это слишком медленно, поэтому я хочу заменить их переменной, а затем изменить переменную и получить соответствующий характер. Например, теперь я знаю, что Юникод U + 095F, я хочу, чтобы показать диапазон U + 095F до U + 096f в UILabel, я могу сделать это с жёстко, какКак преобразовать переменную шестнадцатеричного числа Unicode в символ в NSString?

NSString * ул = [NSString stringWithFormat: @ "\ u095f"];

, но я хочу сделать это как

NSInteger шестигранной = 0x095f;

[NSString stringWithFormat: @ "\ u% ld", (long) hex];

Я могу изменить шестерку автоматически, точно так же, как с помощью @"%ld", (long)hex, так что кто-нибудь знает, как это реализовать?

+0

http://stackoverflow.com/questions/7411836/iphone-convert-unicode-to-string – luk2302

+0

@ luk2302, я видел этот ответ, но это также была жестко закодированная строка, я хочу использовать переменную в строке для создания тот же результат. – cajsaiko

ответ

3

Вы можете инициализировать строку буфером байтов шестнадцатеричного кода (вы просто предоставляете его указатель). Дело в том, и важно отметить, что вы предоставляете кодировку символов для применения. В частности, вы должны заметить порядок байтов.

Вот пример:

UInt32 hex = 0x095f; 
NSString *unicodeString = [[NSString alloc] initWithBytes:&hex length:sizeof(hex) encoding:NSUTF32LittleEndianStringEncoding]; 

Обратите внимание, что решения, как с использованием формата %C отлично до тех пор, пока вы используете их для 16-битных символов Юникода; 32-разрядные символы Unicode, такие как emojis (например: 0x1f601, 0x1f41a), не будут работать с использованием простого форматирования.

+0

спасибо! Это то, что я хочу! – cajsaiko

0

Как это:

unichar charCode = 0x095f; 
NSString *s = [NSString stringWithFormat:@"%C",charCode]; 
NSLog(@"String = %@",s); //Output:String = य़ 
+0

@Artal - это правильно. Формат% C работает только в диапазоне 0 - 65 535 кодов символов, но указанный предел Unicode составляет 1114112 кодов. – David

0

Вы должны использовать

[NSString stringWithFormat:@"%C", (unichar)hex]; 

или непосредственно объявить unichar (unsigned short), как

unichar uni = 0x095f; 
[NSString stringWithFormat:@"%C", uni]; 

полезный ресурс может быть String Format Specifiers, в котором перечислены %C как

16-битный Unicode символ (unichar), печатается NSLog() в качестве ASCII символа, или, если не символ ASCII, в восьмеричном формате \ ддд или Unicode шестнадцатеричном формате \ udddd, где d является цифра.