Bri*_*ian 6 cocoa objective-c character-encoding nsstring
我有一个字符串,我想作为一个字节数组.到目前为止,我已经使用NSData来做到这一点:
NSString *message = @"testing";
NSData *messageData = [message dataUsingEncoding:NSUnicodeStringEncoding allowLossyConversion:YES];
NSUInteger dataLength = [messageData length];
Byte *byteData = (Byte*)malloc( dataLength );
memcpy( byteData, [messageData bytes], dataLength );
Run Code Online (Sandbox Code Playgroud)
但是,我知道NSString有一个getBytes:maxLength:usedLength:encoding:options:range:remainingRange:允许我一起跳过使用NSData 的方法.我的问题是,我不知道如何正确设置所有参数.
我假设传入的指针数组必须是malloc'ed - 但我不知道如何找到malloc的内存量.我知道有[NSString lengthOfBytesUsingEncoding:],[NSString maximumLengthOfBytesUsingEncoding:]但我不知道这些是我需要使用的方法,也不完全理解它们之间的区别.我认为这与给出的值相同maxLength.其余参数从文档中有意义.任何帮助都会很棒.谢谢.
lengthOfBytesUsingEncoding:和之间的区别在于maximumLengthOfBytesUsingEncoding:前者是精确但缓慢(O(n))而后者是快速(O(1))但可能返回比实际需要的字节数大得多的字节数.maximumLengthOfBytesUsingEncoding:给出的唯一保证是返回值足够大以包含字符串的字节.
通常,您的假设是正确的.所以该方法应该像这样使用:
NSUInteger numberOfBytes = [message lengthOfBytesUsingEncoding:NSUnicodeStringEncoding];
void *buffer = malloc(numberOfBytes);
NSUInteger usedLength = 0;
NSRange range = NSMakeRange(0, [message length]);
BOOL result = [message getBytes:buffer maxLength:numberOfBytes usedLength:&usedLength encoding:NSUnicodeStringEncoding options:0 range:range remainingRange:NULL];
...
free(buffer);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7348 次 |
| 最近记录: |