我有不同的NSData流向我的班级。其中一些可能是rtf格式化的字符串。现在我发现(希望是正确的)所有rtf格式的字符串都以
开头data: <7b5c7274 66315c61 and then random other data ....>
现在我需要能够进行测试,以查看任何给定NSData的前8个字节是否等于(7b5c7274 66315c61)。所以我想这个问题会有两个问题:
如何存储(7b5c7274 66315c61)值以进行测试
如何针对任何给定的NSData进行测试
答案 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
返回零),这就是你想。