如何NSLog缓冲区流中包含零的字节缓冲区(NSData/const char *)?
问题描述:
欲的NSLog在流的中途的PDF已压缩流对象包括零(“”)的含量。如何NSLog缓冲区流中包含零的字节缓冲区(NSData/const char *)?
不幸的“”的第一个目标流的第一次出现终止控制台上的输出...
无法在SO还是在云中都发现了什么。
试图在4点不同的方式......在控制台上
NSString *pdfFilePath = [[NSBundle mainBundle] pathForResource: @"myPDF" ofType: @"pdf"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:pdfFilePath];
NSData *myData = [NSData dataWithContentsOfURL:fileURL];
________________________________________________________________________
//1
NSString *string = [[NSString alloc] initWithData:myData
encoding:NSASCIIStringEncoding];
NSLog(@"%@", string);
________________________________________________________________________
//2
NSString *myDataAsString = [[NSString alloc] initWithData:myData
encoding:NSASCIIStringEncoding];
NSLog(@"%@", myDataAsString);
________________________________________________________________________
//3
NSString *myPDFasString = [NSString stringWithContentsOfURL:fileURL
encoding:NSASCIIStringEncoding error:NULL];
NSLog(@"%@", myPDFasString);
________________________________________________________________________
//4
NSString *stringFromFileAtURL = [[NSString alloc] initWithContentsOfURL:fileURL
encoding:NSASCIIStringEncoding error:NULL];
NSLog(@"%@", stringFromFileAtURL);
输出他们的所有4个:(当然 - 它总是在后备存储一个空值终止字符串)
%PDF-1.1
%
1 0 obj <<
/Type /Catalog
/Count 1
/Pages 6 0 R >>
endobj
2 0 obj <<
%%/Type /Stream
/Filter /FlateDecode
/Length 12 >>
stream
x+TT
在这里,流结束,因为“X + TT”(其为一个目标流的开始)之后的“0” ...
任何?
答
NSLog
格式化C风格的字符串将停止在null处,如同其他任何输出C字符串的地方一样。
有很多方法可以用简单的代码解决您的问题,这只是为了调试,所以不需要花哨。下面是一些指针:
-
NSData
可以给你一个指针字节,bytes
,以及有多少,length
。 - 标准C库函数
isprint
会告诉你一个字符是否可打印。 - 标准C库函数
putchar
将向控制台输出单个字符。 - 如果你想产生一些non-printables的表示,你可能会发现
printf
有用。
如果您遇到问题,请提出另一个问题,包括您编写的代码。
HTH
在你的问题中显示一些相关的代码。 – rmaddy
'myData'不能简单地转换为'NSString',因为'myData'实际上并不是字符串数据。 – rmaddy
是的,你只是得到NSData的描述... - 这不是重点!问题不在于如何检索要传递给NSLog的字符串。问题在于字符串中间有一个'0',因为它只是一些二进制数据的字符串表示,它恰好在data-blip - >中间有一个'0',并且这个'0'终止了数据流就好像它(实际上是)空终止符。我需要一个'字符串格式说明符',它将整个blip作为一个实体对待,而不依赖于终止零! – mramosch