Unichar * NSString, получить длину - PullRequest
0 голосов
/ 26 июля 2011

Я пытаюсь создать объект NSString из буфера const unichar, где я не знаю длину буфера.

Я хочу использовать NSString stringWithCharacters: length: метод для создания строки (похоже, это работает), но, пожалуйста, не могли бы вы помочь мне узнать длину?

У меня есть:

const unichar *c_emAdd = [... returns successfully from a C++ function...]

NSString *emAdd = [NSString stringWithCharacters:c_emAdd length = unicharLen];

Может кто-нибудь помочь мне узнать, как проверить, что такое unicharLen? Я не получаю эту длину обратно при вызове функции C ++, поэтому я предполагаю, что мне нужно будет выполнить итерацию, пока я не найду завершающий символ? У кого-нибудь есть фрагмент кода, чтобы помочь? Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

Ваш буфер символов завершен? Это 16-битный юникод?

NSString *emAdd = [NSString stringWithFormat:@"%S", c_emAdd];
1 голос
/ 26 июля 2011

Ваши unichar s должны иметь нулевое завершение, поэтому, когда вы достигнете двух нулевых байтов (unichar = 0x0000) в указателе, вы узнаете длину.

unsigned long long unistrlen(unichar *chars)
{
    unsigned long long length = 0llu;
    if(NULL == chars) return length;

    while(NULL != chars[length])
        length++;

    return length;
}

    //...
    //Inside Some method or function
    unichar chars[] = { 0x005A, 0x0065, 0x0062, 0x0072, 0x0061, 0x0000 };

    NSString *string = [NSString stringWithCharacters:chars length:unistrlen(chars)];

    NSLog(@"%@", string);

Или еще более простой формат с %S спецификатором

...