你的語法是正確的。 NSString不能很好地處理NULL
字節。我找不到關於它的任何文檔,但是NSString會默默地忽略%c
格式說明符,參數爲0
(並且在該說明中,字符常量'\0'
擴展爲整數0
;這是正確的)。它可以,但是,處理\0
直接嵌入到一個NSString字面。
看到這個代碼:
#import <Cocoa/Cocoa.h>
int main (int argc, char const *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *stringByChars = [NSString stringWithFormat:@"-%c%c%c%c-",0,0,0,0];
NSString *stringByEscapes = [NSString stringWithFormat:@"-\0\0\0\0-"];
NSLog(@" stringByChars: \"%@\"", stringByChars);
NSLog(@" len: %d", [stringByChars length]);
NSLog(@" data: %@", [stringByChars dataUsingEncoding:NSUTF8StringEncoding]);
NSLog(@"stringByEscapes: \"%@\"", stringByEscapes);
NSLog(@" len: %d", [stringByEscapes length]);
NSLog(@" data: %@", [stringByEscapes dataUsingEncoding:NSUTF8StringEncoding]);
[pool drain];
return 0;
}
回報:
stringByChars: "--"
len: 2
data: <2d2d>
stringByEscapes: "-
len: 6
data: <2d000000 002d>
(請注意,由於stringByEscapes
實際上包含NULL
字節,它早終止NSLog的字符串)。
請描述「不起作用」 – slf 2010-01-21 19:01:03
NSLog你的字符串 – vaddieg 2010-01-21 19:14:07
爲什麼你的字符串包含NUL字符?這聽起來像是應該是一個NSData開始的東西。 – Chuck 2010-01-21 22:06:48