【发布时间】:2011-04-17 07:15:48
【问题描述】:
我需要使用NSLog 之类的东西,但没有时间戳和换行符,所以我使用printf。我如何将它与NSString 一起使用?
【问题讨论】:
标签: objective-c cocoa-touch nsstring printf nslog
我需要使用NSLog 之类的东西,但没有时间戳和换行符,所以我使用printf。我如何将它与NSString 一起使用?
【问题讨论】:
标签: objective-c cocoa-touch nsstring printf nslog
您可以通过调用UTF8String 方法将NSString 转换为UTF8 字符串:
printf("%s", [string UTF8String]);
【讨论】:
//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
注意您的里程可能会有所不同:)
谢谢。
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
返回此字符串是否可以在不丢失信息的情况下转换为给定的字符串编码。
【讨论】: