我在指定的网址上有一个文件(没有扩展名)。
我希望能够从该文件中读取每个单独的字节,并将其二进制编码转换为正常的人类可读小数。
示例:
从网址 - >读取文件将其加载到缓冲区中 - >读取字节数20(例如) - > 将其值转换为十进制/整数,我可以从那里继续工作。 (显示在标签上等)。
现在我只能在文件是本地文件(NSFileHandle
)时设法读取文件,但由于此文件发生更改,并且通常必须从URL读取,因此必须加载方法它来自一个URL。
非常感谢。
// ifraaank
答案 0 :(得分:1)
您可以通过多种方式从URL中读取资源。在iOS7之前,您可以使用NSURLConnection。这是示例
NSURL *URL = [NSURL URLWithString:@"http://file.com/xxxx"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError
*connectionError) {
if ( !connectionError ){
//transfer the NSData into what you need
}else{
UIAlertView *alert = [UIAlertView alloc]initWithTitle:@"Error"....
}
}];
在iOS7之后,您还可以使用NSURLSession,这是示例
NSURL *URL = [NSURL URLWithString:@"http://file.com/xxx"];
NSURLSession *session = [NSURLSession sessionWithConfiguration:
[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionTask *task = [session downloadTaskWithURL:URL
completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
if ( !error){
NSData *data = [NSData dataWithContentsOfURL: location];
//transfer the NSData into what you need
}
}];
[task resume];
希望得到这个帮助。
编辑: 如果要从NSData读取字节。您可以执行示例
Byte buffer[20];
int bufferLength = 20;
for ( int i= 0; i < [data length] ; i=i+20){
memset(&buffer, 0, 20);
//check the buffer length exceed the end of NSData
bufferLength = (bufferLength > [data length]-i)?(bufferLength = [data length]-i):bufferLength;
[data getBytes:&buffer range:NSMakeRange(i, bufferLength)];
//perform the buffer, it's a Byte[20]
}
答案 1 :(得分:1)
要加载远程文件,您需要查看NSURLConnection
。您不将字节转换为十进制,只是将它们显示为十进制,或生成一个字符串:
printf("%d", (int)theByte);
或
[NSString stringWithFormat:@"%d", (int)theByte];
有一件事要注意,因为一个字节没有%d
等价物,所以你需要注意不要最终显示一个16位的int而不是一个8位的int。