2010-12-01 27 views
0

例如:如何[NSData的长度]转换为NSData的

NSData *data = [NSData dataWithContentsOfFile:filePath]; 
int len = [data length]; 

如果len = 10000, 我希望我可以1000转换为NSData的样子

char hoperesult[] = {0x10, 0x27, 0x00, 0x00} 

和hoperesult []必须总是4字节

回答

2

所以你想要4个小端字节的长度,是否正确?我认为,这将做到这一点:

unsigned int len = [data length]; 
uint32_t little = (uint32_t)NSSwapHostIntToLittle(len); 
NSData *byteData = [NSData dataWithBytes:&little length:4]; 

(注意,大多数网络协议采用大端,但你表现出小尾数所以这就是这样做。)

0

我不是100%确定你在这里的意思,但我认为你试图用'filePath'文件中找到的值填充hoperesult。

struct _hoperesult { 
    char data[4]; 
} *hoperesult; 

NSData *data = [NSData dataWithContentsOfFile:filePath]; 
NSUInteger len = [data length]; 
NSRange offset; 
offset.location = 0; 
offset.length = sizeof(_hoperesult); 
NSData *hoperesultData; 

while((offset.location + offset.length) < len) { 
    hoperesultData = [data subdataWithRange:offset]; 
    // the equivalent of your char hoperesult[] content... 
    hoperesult = [hoperesultData bytes] 
} 

NSData的一个实例可以使用“bytes”方法返回一个指向实际字节数据的指针。它返回一个(const void *)。您理论上可以简单地将[数据字节]转换为char *并直接使用偏移量;或者你可以像上面的代码那样做,并返回更小的NSData。

希望有帮助!