例如:
NSData *data = [NSData dataWithContentsOfFile:filePath];
int len = [data length];
如果len = 10000,我希望我可以将1000转换为NSData,如下所示
char hoperesult[] = {0x10, 0x27, 0x00, 0x00}
并且hoperesult[]必须始终为4个字节
发布于 2010-12-02 02:29:10
所以你想要的长度是4个小端字节,对吗?我想这样就可以了:
unsigned int len = [data length];
uint32_t little = (uint32_t)NSSwapHostIntToLittle(len);
NSData *byteData = [NSData dataWithBytes:&little length:4];
(请注意,大多数网络协议都使用big-endian,但是您显示的是little-endian,所以这就是它的作用。)
发布于 2010-12-02 01:46:41
我不是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块。
希望这能有所帮助!
https://stackoverflow.com/questions/4327101
复制相似问题