【问题标题】:NSString to fixed length char array conversionNSString 到固定长度字符数组的转换
【发布时间】:2012-08-31 13:54:24
【问题描述】:

我有一个结构,它包含一个这样的 char 数组:

char name[10];

现在我需要一种方法将 NSString 转换为这种类型的字符串。

我已经可以将此字符串转换为 NSString:

NSString *string = [[NSString alloc] initWithBytes:name length:10      
encoding:NSASCIIStringEncoding];

【问题讨论】:

    标签: objective-c cocoa nsstring arrays


    【解决方案1】:

    您可以使用NSStringgetCString:maxLength:encoding: 方法来做到这一点:

    char name[10];
    NSString *s = @"Hello";
    [s getCString:name maxLength:10 encoding:NSASCIIStringEncoding];
    

    【讨论】:

    • 这就是我现在将 NSString 转换为 char 数组的方法:char name[10]; NSString* str = @"John"; [str getCString:name maxLength:10 encoding:NSASCIIStringEncoding]; 这是从 char 数组转换为 NSString NSString* stringB = [NSString stringWithCString:name encoding:NSASCIIStringEncoding]; 感谢您的帮助。
    【解决方案2】:

    完整的转换过程来回:

    // from NSString through char* to NSString again
    NSString *text = @"long text or short";
    const char *constName = [text UTF8String];
    
    char *name = malloc(sizeof(unichar) * text.length + 1);
    memcpy(name, constName, sizeof(unichar) * text.length);
    
    NSString *fromChar = [NSString stringWithUTF8String:name];
    
    NSLog(@"%@", fromChar);
    
    free(name);
    

    【讨论】:

    • 这不起作用,因为在这种情况下我不能使用任何指针。
    • 你是什么意思你不能使用任何指针您已经在使用指针,当您定义 char name[10]; 时,它与 char *name;name = malloc(sizeof(char) * 10); 行非常相似。你能澄清你的评论吗?
    • 好的,字符串是作为数组分配的结构的一部分。当结构中没有指针时,我可以通过直接从内存中复制字节来将整个数组保存到磁盘。有了指针,事情就不会这么简单了,尤其是有几个指针。无论如何感谢您的努力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    相关资源
    最近更新 更多