如何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” ...

任何?

+1

在你的问题中显示一些相关的代码。 – rmaddy

+0

'myData'不能简单地转换为'NSString',因为'myData'实际上并不是字符串数据。 – rmaddy

+0

是的,你只是得到NSData的描述... - 这不是重点!问题不在于如何检索要传递给NSLog的字符串。问题在于字符串中间有一个'0',因为它只是一些二进制数据的字符串表示,它恰好在data-blip - >中间有一个'0',并且这个'0'终止了数据流就好像它(实际上是)空终止符。我需要一个'字符串格式说明符',它将整个blip作为一个实体对待,而不依赖于终止零! – mramosch

NSLog格式化C风格的字符串将停止在null处,如同其他任何输出C字符串的地方一样。

有很多方法可以用简单的代码解决您的问题,这只是为了调试,所以不需要花哨。下面是一些指针:

  • NSData可以给你一个指针字节,bytes,以及有多少,length
  • 标准C库函数isprint会告诉你一个字符是否可打印。
  • 标准C库函数putchar将向控制台输出单个字符。
  • 如果你想产生一些non-printables的表示,你可能会发现printf有用。

如果您遇到问题,请提出另一个问题,包括您编写的代码。

HTH

+0

哦,来吧 - 我不想失礼 - 我知道你正在努力帮助,但你必须更仔细地阅读我的问题! NSLog可以向控制台写入任何在输出字符串中间出现'0'的字符串(在字符串结尾'0'之前)? – mramosch

+0

@mramosch - 道歉不清楚,编辑答案。 – CRD

+0

** @ CRD:**感谢您澄清 - 但这正是我的观点和问题。是否有或没有NSLog有机会得到一个数据点,其中包含一个零 - 在控制台?有什么想法呢? – mramosch