Nsstring *message = @"testing";NSData *messageData = [message dataUsingEnCoding:NSUnicodeStringEnCoding allowLossyConversion:YES];NSUInteger dataLength = [messageData length];Byte *byteData = (Byte*)malloc( dataLength );memcpy( byteData,[messageData bytes],dataLength );
但是,我知道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);总结
以上是内存溢出为你收集整理的objective-c – 如何使用NSString getBytes:maxLength:usedLength:encoding:options:range:remainingRange:全部内容,希望文章能够帮你解决objective-c – 如何使用NSString getBytes:maxLength:usedLength:encoding:options:range:remainingRange:所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)