0

我正在尝试从我不知道缓冲区长度的 const unichar 缓冲区创建一个 NSString 对象。

我想使用 NSString stringWithCharacters: length: 方法来创建字符串(这似乎可行),但请你帮我找出长度吗?

我有:

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

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

谁能帮我找出如何检查 unicharLen 是什么?我没有通过调用 C++ 函数将这个长度传回给我,所以我认为我需要迭代直到找到终止字符?有人有代码片段可以帮助吗?谢谢!

4

2 回答 2

2

你的 char 缓冲区 null 终止了吗?它是 16 位 unicode 吗?

NSString *emAdd = [NSString stringWithFormat:@"%S", c_emAdd];
于 2011-07-26T16:52:51.953 回答
1

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说明符的格式

于 2011-07-26T17:02:47.133 回答