64

我需要使用类似NSLog但没有时间戳和换行符的东西,所以我使用printf. 我怎么能用这个NSString

4

2 回答 2

113

您可以通过调用方法将 a 转换NSStringUTF8字符串UTF8String

printf("%s", [string UTF8String]);
于 2010-09-26T00:26:46.603 回答
2
//public method that accepts a string argument

- (void) sayThis : ( NSString* )  this 
{

    printf("%s",[this cString]);    
}

根据 NSString.h(html 版本),UTF8String 方法仅在 Mac OSX 上可用。

(见下文)我查看的所有其他方法都标记为“可用性:Openstep”

还有其他方法可以返回常规的 char* 字符串,但它们可能会引发字符转换异常。

注意字符串指针指向可能会消失的内存,因此如果要保留字符串内容的副本,则必须复制字符串,但立即打印应该没问题?

还有一些方法会返回一个编码的字符串,还有一个方法来测试你想要的编码是否可以工作(我认为),这样你就可以检查你需要的编码是否可以工作,然后请求一个已根据需要编码的字符串。

通过阅读 .h 文件本身,有许多编码和编码之间的转换。这些是使用枚举管理的,因此您可以将所需的编码类型作为参数传递。

在linux等上做:

找到 NSString.h ** 注意这也找到了 html doc 文件

否则做一个:

查找 /usr -name NSString.h

注意您的里程可能会有所不同:)

谢谢。

从 NSString.h html 文档文件:

cString - (const char*) cString; 可用性:OpenStep

返回指向默认编码的 8 位字符的空终止字符串的指针。指向的内存不属于调用者所有,所以调用者必须复制它的内容来保留它。如果在转换过程中会丢失信息,则引发 NSCharacterConversionException。(参见 -canBeConvertedToEncoding: 。)

cStringLength - (NSUInteger) cStringLength; 可用性:OpenStep

返回使用默认 C 字符串编码转换为字节的 Unicode 字符串版本的长度。如果转换会导致信息丢失,结果是不可预测的。检查 -canBeConvertedToEncoding: 首先。

cStringUsingEncoding: - (const char*) cStringUsingEncoding: (NSStringEncoding)encoding; 可用性:MacOS-X 10.4.0,基础 1.2.0

返回指向指定编码的以空字符结尾的字符串的指针。注意。在 GNUstep 下,您可以使用它来获取以 nul 结尾的 utf-16 字符串(十六位字符)以及八位字符串。指向的内存不属于调用者所有,所以调用者必须复制它的内容来保留它。如果在转换过程中会丢失信息,则引发 NSCharacterConversionException。

canBeConvertedToEncoding: - (BOOL) canBeConvertedToEncoding: (NSStringEncoding)encoding; 可用性:OpenStep

返回此字符串是否可以在不丢失信息的情况下转换为给定的字符串编码。

于 2018-06-19T12:29:32.723 回答