如何从NSData中读取字节

14

有人可以建议一种从NSData读取字节的方法吗(类似于@interface NSInputStreamNSStream中的read函数)

5个回答

27

如何在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
}

9

如果您需要读取接口,您还可以从NSData对象创建NSInputStream:

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

然而,您应该知道initWithData复制数据的内容。


2

其中最简单的方法是使用NSData getBytes:range:

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

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


1

需要更新你的代码片段以读取:[data getBytes:buffer length:numberOfBytes]; - pete

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接