2010-12-01 28 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。

希望有幫助!