gpt4 book ai didi

objective-c - 如何使用 NSString getBytes :maxLength:usedLength:encoding:options:range:remainingRange:

转载 作者:太空狗 更新时间:2023-10-30 03:51:25 24 4
gpt4 key购买 nike

我有一个字符串,我想将其作为字节数组。到目前为止,我已经使用 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 );

但是,我知道 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:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8019647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com