如何测试NSData的特定字节值(a.k.a.标题)

时间:2012-06-09 04:50:12

标签: objective-c ios byte nsdata

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

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

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

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

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

  3. 谢谢你!

2 个答案:

答案 0 :(得分:3)

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

将rtf文件放入NSData,获取前八个字节,打印出来,并将这些常量常量放在程序中的字节数组中。然后将该数组与getBytes:length:返回的八个字节进行比较。{/ 3}}。

答案 1 :(得分:2)

RTF是一种基于文本的文件格式。来自NSData的那些值对应于“{\ rtf1 \ a”,其中“\ a”是“\ ansi”的开头。就个人而言,我只是测试前5个字节匹配“{\ rtf”。这就是file命令的“magic”文件用作测试的内容。请参阅/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返回零),这就是你想。