开发者

how convert [NSData length] to a NSData

ex:

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

if len = 10000, i hope i can convert 1000 to a NSData look like

char hoperesult[] =开发者_如何学Go {0x10, 0x27, 0x00, 0x00}

and hoperesult[] must always 4 Bytes


So you want the length in 4 little-endian bytes, correct? I think this will do it:

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

(Note that most network protocols use big-endian, but you showed little-endian so that's what this does.)


I'm not 100% sure what you mean here, but I think you are attempting to fill hoperesult with the values found in the file at 'filePath'.

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]
}

An instance of NSData can return a pointer to the actual bytes of data using the "bytes" method. It returns a (const void *). You could in theory simply cast [data bytes] to a char * and use the offset directly; or you can do like in the above code and return smaller chucks of NSData.

Hope that helps!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜