繁体   English   中英

如何从 NSData 读取字节

[英]How to read bytes from NSData

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

如何读取 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
}

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

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

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

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

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

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

Alex 已经提到了NSData getBytes:range: 但还有NSData getBytes:length:从第一个字节开始。

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

可能的方式..不要忘记在使用后释放字节​​数组。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM