我正在尝试使用NSData读取SWF文件的标头。 根据SWF格式规范,我需要访问电影的宽度和高度读取位,而不是字节,我在Obj-C中找不到办法
字节9到?:这里存储了一个RECT(电影的边界)。必须以二进制形式阅读。首先,我们将第一个字节转换为二进制:“01100000” 前5位将告诉我们每个存储值的位大小:“01100”= 12 因此,我们有4个12位= 48位的字段 48位+5位(RECT的标题)= 53位 填充以零完成字节,直到我们达到8. 53位+ 3个对齐位= 56位的倍数(此RECT长度为7个字节,7 * 8 = 56) 我用这个公式来确定所有这些东西:
我从哪里开始?
答案 0 :(得分:2)
ObjC是C的超集:您可以在没有问题的情况下与ObjC一起运行C代码。
因此,您可以使用基于C的库(如libming)从SWF文件中读取字节。
如果您需要将字节移植到NSData
对象中,请查看-dataWithBytes:length:
方法。
答案 1 :(得分:1)
首先查找具有已执行所需功能的兼容许可证的代码。可以从Obj-C代码中使用C库,只需将它们链接起来(或安排它们动态链接),然后调用它们的函数。
如果不这样做,请先查看Binary Data Programming Guide for Cocoa和NSData Class Reference。您需要提取包含您感兴趣的位的字节,然后使用位屏蔽技术来提取您关心的位。如果它们仍然存在于Snow Leopard中,您可能会发现BitTst()
,BitSet()
和BitClr()
函数及其朋友很有用;我不确定他们是否最终进入了Carbon的淡化部分。还有定义的Posix setbit()
,clrbit()
,isset()
和isclr()
宏。然后,最后,有C位运算符:^
,|
,&
,~
,<<
和>>
。