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