2

我有各种各样的 NSData 流向我的班级。其中一些可能是 rtf 格式的字符串。现在我发现(希望是正确的)所有 rtf 格式的字符串都以

data: <7b5c7274 66315c61 and then random other data ....>

现在我需要能够进行测试,看看任何给定的 NSData 的前 8 个字节是否等于(7b5c7274 66315c61)。所以我想这个问题有两个方面:

  1. 如何存储 (7b5c7274 66315c61) 值以进行测试

  2. 我如何针对任何给定的 NSData 对其进行测试

谢谢你!

4

2 回答 2

3

你可以调用getBytes:length:,传递一个八字节的缓冲区,然后测试你得到的结果。

将 rtf 文件放入NSData,获取前八个字节,将它们打印出来,然后将这八个常量放入程序中的字节数组中。然后将该数组与getBytes:length:使用返回的八个字节进行比较memcmp

于 2012-06-09T04:55:20.530 回答
2

RTF 是一种基于文本的文件格式。这些值NSData对应于“{\rtf1\a”,其中“\a”是“\ansi”的开头。就个人而言,我只是测试前 5 个字节是否匹配“{\rtf”。这就是file命令的“魔术”文件用作测试的内容。见/usr/share/file/magic/rtf

由于匹配文本是纯 ASCII,您可以使用NSString* theString = [[NSString alloc] initWithBytes:[theData bytes] length:MIN([theData length], 5) encoding:NSASCIIStringEncoding]然后[theString isEqualToString:@"{\\rtf"]. 如果数据不是 ASCII,那么解码将失败并且将会失败,theString并且nil相等性测试将给出错误(因为消息传递nil返回零),这就是您想要的。

于 2012-06-09T05:18:33.413 回答