如何从NSData读取字节

时间:2012-09-17 04:19:18

标签: iphone ios ios5 ios4

任何人都可以建议从NSData读取字节的方法(例如@interface NSInputStream中的读取函数:NSStream

5 个答案:

答案 0 :(得分:22)

How to read binary bytes in NSData?”可以帮助您:

NSString *path = @"…put the path to your file here…";
NSData * fileData = [NSData dataWithContentsOfFile: path];
const char* fileBytes = (const char*)[fileData bytes];
NSUInteger length = [fileData length];
NSUInteger index;

for (index = 0; index<length; index++)
{
   char aByte = fileBytes[index];
   //Do something with each byte
}

答案 1 :(得分:8)

如果您需要阅读界面,还可以从NSInputStream对象创建NSData

NSData *data = ...;
NSInputStream *readData = [[NSInputStream alloc] initWithData:data];
[readData open];

但是,您应该知道initWithData 复制数据内容。

答案 2 :(得分:0)

最简单的方法之一是使用NSData getBytes。

NSData *data = ...;
char buffer[numberOfBytes];
[NSData getBytes:buffer range:NSMakeRange(position, numberOfBytes)];

其中position和length是您要在NSData中读取的位置,长度是您要读取的字节数。无需复制。

答案 3 :(得分:0)

可能这样做.. 使用后不要忘记释放字节数组。

NSData* dat = //your code
NSLog(@"Receive from Peripheral: %@",dat);
NSUInteger len = [dat length];
Byte *bytedata = (Byte*)malloc(len);
[dat getBytes:bytedata length:len];
int p = 0;
while(p < len)
{
    printf("%02x",bytedata[p]);
    if(p!=len-1)
    {
     printf("-");
    }//printf("%c",bytedata[p]);
    p++;
}
printf("\n");
// byte array manipulation

free(bytedata);

答案 4 :(得分:0)

Alex already mentioned NSData getBytes:range:但是还有NSData getBytes:length:从第一个字节开始。

NSData *data = ...;
char buffer[numberOfBytes];
[data getBytes:buffer range:numberOfBytes];