从URL读取字节,并将二进制转换为正常小数。 OBJ-C

时间:2014-01-02 00:56:57

标签: ios iphone objective-c ipad

我在指定的网址上有一个文件(没有扩展名)。

我希望能够从该文件中读取每个单独的字节,并将其二进制编码转换为正常的人类可读小数。

示例:

网址 - >读取文件将其加载到缓冲区中 - >读取字节数20(例如) - > 将其值转换为十进制/整数,我可以从那里继续工作。 (显示在标签上等)。

现在我只能在文件是本地文件(NSFileHandle)时设法读取文件,但由于此文件发生更改,并且通常必须从URL读取,因此必须加载方法它来自一个URL。

非常感谢。

// ifraaank

2 个答案:

答案 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。