2011-07-26 5 views
0

J'essaie de créer un objet NSString à partir d'un tampon const unichar où je ne connais pas la longueur du tampon. Je souhaite utiliser la méthode NSString stringWithCharacters: length: pour créer la chaîne (cela semble fonctionner), mais pouvez-vous m'aider à trouver la longueur?unichar * à NSString, obtiens la longueur

J'ai:

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

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

Quelqu'un peut-il me aider à trouver comment vérifier ce que unicharLen est? Je ne reçois pas cette longueur me renvoyé par l'appel à la fonction C++, donc je suppose que je devrais itérer jusqu'à ce que je trouve un caractère de fin? Quelqu'un a un extrait de code pour aider? Merci!

Répondre

1

Votre unichar s devrait être nulle fin si vous lorsque vous atteignez deux octets nuls (un unichar = 0x0000) dans le pointeur, vous saurez la longueur.

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); 

Ou encore plus simple avec le format %S specifier

+0

Great stuff, merci. – paynio

2

Est-ce que votre tampon de caractère null est terminé? S'agit-il d'unicode 16 bits?

NSString *emAdd = [NSString stringWithFormat:@"%S", c_emAdd];