如何测试 NSData 的特定字节值(也称为标头)



我已经改变了NSData流向我的类。 其中一些可能是 RTF 格式的字符串。 现在我发现(希望正确)所有 RTF 格式的字符串都以

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

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

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

  2. 我如何针对任何给定的 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返回零),这就是您想要的。

最新更新