我已经改变了NSData流向我的类。 其中一些可能是 RTF 格式的字符串。 现在我发现(希望正确)所有 RTF 格式的字符串都以
data: <7b5c7274 66315c61 and then random other data ....>
现在我需要能够进行测试,以查看任何给定 NSData 的前 8 个字节是否等于 (7b5c7274 66315c61)。 所以我想这个问题会是双重的:
如何存储 (7b5c7274 66315c61) 值以进行测试
我如何针对任何给定的 NSData 测试它
谢谢!
您可以调用 getBytes:length:
,传递一个八字节的缓冲区,并测试返回的结果。
将一个 rtf 文件放入 NSData
中,获取前八个字节,打印出来,然后将这些常量放在程序的字节数组中。然后将该数组与getBytes:length:
使用 memcmp
返回的八个字节进行比较。
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
,相等性测试将给出 false(因为消息传递nil
返回零),这就是您想要的。