【问题标题】:How to convert an "initWithBytes" NSString to unsigned char*如何将“initWithBytes”NSString 转换为 unsigned char*
【发布时间】:2012-06-20 16:04:26
【问题描述】:

如何将 "initWithBytes" NSString 转换为 unsigned char*?

NSString 是这样产生的

NSString *byte = [[[NSString alloc] initWithBytes:inputbytes length:inputlength encoding:NSASCIIStringEncoding] autorelease];

其中包含不应在位级别更改的字节数据(将作为base64转换的输入)

字节中的数据为0x01 0x00 0x01,3个字节

我想把它转换成一个 unsigned char*

我该怎么做?

谢谢

【问题讨论】:

    标签: objective-c ios nsstring char


    【解决方案1】:
    【解决方案2】:

    一般来说,您应该直接使用NSString,而不是尝试进出Objective-C。但是有理由降级到 C (例如,使用仅 C 的 API),所以我会幽默你。 ;)

    如果你只是需要将数据传递给另一个函数,你可以这样做:

    const unsigned char *cString = (const unsigned char *)[byte cStringUsingEncoding: NSASCIIStringEncoding];
    

    如果您需要修改 C 字符串(即使其成为非const),则需要进行复制:

    const unsigned char *cString = (const unsigned char *)strdup([byte cStringUsingEncoding: NSASCIIStringEncoding]);
    

    然后free() 完成后:

    free(cString);
    

    请注意,这不会修改原始 C 字符串或您从中创建的 NSString。如果你需要NSString,你可以修改,使用NSMutableString

    【讨论】:

    • 感谢您的回答。我确实“必须”将它们转换为 C 字符串,因为我使用的是 C 库,而且我对 C 很熟悉。我尝试了这两种方法,但我得到的字符串似乎是空的,strlen 的返回值为1.我想知道是否与“initWithBytes:inputbytes”有关?谢谢
    • 您正在使用的字符串可能不是纯 ASCII。 UTF-8 编码是否有效?
    • 我发现字符串被复制成功(通过访问string[]),但是strlen函数不能返回正确的值。谢谢!
    • 这意味着一个空字符 (\0) 进入了 C 字符串。您要测试的字符串是什么?
    • 这是智能卡的输出(进行 RSA 加密)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2013-09-23
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多