Ios 以字节为单位获取UTF-8字符串长度的最佳方法?

Ios 以字节为单位获取UTF-8字符串长度的最佳方法?,ios,objective-c,utf-8,Ios,Objective C,Utf 8,我想从NSString获取cString。 所以我们用c​一串​使用​编码:​ 方法。 但是,c的返回值​一串​使用​编码:​ 方法不受保证。 (苹果的文档:返回的C字符串保证仅在任一接收者被释放之前有效。) 所以苹果公司推荐get​CString:​最大值​长度:​编码:方法。 我想将精确长度传递给maxLength。 例1) 例2) 有没有办法知道上面示例中9和12的长度?您可以使用cstringusingencode获取长度。如果需要生成的char*比tmp寿命更长,只需复制C字符串: /

我想从NSString获取cString。
所以我们用c​一串​使用​编码:​ 方法。
但是,c的返回值​一串​使用​编码:​ 方法不受保证。
(苹果的文档:返回的C字符串保证仅在任一接收者被释放之前有效。)

所以苹果公司推荐get​CString:​最大值​长度:​编码:方法。
我想将精确长度传递给maxLength。

例1)

例2)


有没有办法知道上面示例中9和12的长度?

您可以使用
cstringusingencode
获取长度。如果需要生成的
char*
tmp
寿命更长,只需复制C字符串:

// Add one because this doesn't include the NULL
NSUInteger maxLength = [string maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1;
NSString *tmp = @"中日韓" // cString 9bytes
const char *cStr = [tmp cStringUsingEncoding:NSUTF8StringEncoding];
size_t len = strlen(cStr);
char *buffer = new tmp[len + 1];
strcpy(buffer, cStr);

您可以使用
cstringusingencode
获取长度。如果需要生成的
char*
tmp
寿命更长,只需复制C字符串:

NSString *tmp = @"中日韓" // cString 9bytes
const char *cStr = [tmp cStringUsingEncoding:NSUTF8StringEncoding];
size_t len = strlen(cStr);
char *buffer = new tmp[len + 1];
strcpy(buffer, cStr);

您的代码无效,无法编译。你是说
NSString*tmp=@“你的字符串”
还是说
char*tmp=“你的字符串”?@rmaddy对不起,我弄错了。我编辑了它,为什么这个标记为C++?您只有Objective-C代码。您的代码无效,无法编译。你是说
NSString*tmp=@“你的字符串”
还是说
char*tmp=“你的字符串”?@rmaddy对不起,我弄错了。我编辑了它,为什么这个标记为C++?您只有Objective-C代码。LengthofByteSusingCodeing:更精确——它将获得字符串的实际长度(当然,您仍然需要为NULL添加1)。maximumLength返回速度很快,但将远远超过NSUTF8StringEncoding所需的长度。LengthofBytes SusingEncoding:更精确——它将获得字符串的实际长度(当然,您仍然需要为NULL添加1)。maximumLength很快返回,但将远远超过NSUTF8StringEncoding所需的长度。
NSString *tmp = @"中日韓" // cString 9bytes
const char *cStr = [tmp cStringUsingEncoding:NSUTF8StringEncoding];
size_t len = strlen(cStr);
char *buffer = new tmp[len + 1];
strcpy(buffer, cStr);