【问题标题】:NSString to NSData conversion ProblemNSString 到 NSData 转换问题
【发布时间】:2011-03-21 10:56:19
【问题描述】:

我的字符串中有一些字节的图像,我想将它绘制到 UIImageView ...这是我的代码

NSString* str= @"<89504e47 0d0a1a0a 0000000d 49484452 ........... 454e44ae 426082>";
    NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding]; 
    NSLog(@"My NSDATA  %@",data);
    imageView.image=[UIImage imageWithData:data];

现在,当我在控制台上看到打印的数据时,它的格式与我给该字符串的格式不同..输出类似于.....

<3c383935 30346534 37203064 30613161..........

所以我的 imageview 什么都没有显示.....请帮助

【问题讨论】:

    标签: iphone objective-c bytearray nsdata


    【解决方案1】:

    如果问题是:如何将字符串数据转换为图像,那么这就是答案。

    NSData *imgData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"icon" ofType:@"png"]];
    // set your string data into inputString var
    NSString *inputString = [imgData description];
    NSLog(@"input string  %@",inputString);
    // clearing string from trashes
    NSString *dataStr = [inputString stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    // separate by words of 4 bytes
    NSArray *words = [dataStr componentsSeparatedByString:@" "];
    // calculate number of bytes
    NSArray *sizes = [words valueForKey:@"length"];
    int sizeOfBytes = 0;
    for (NSNumber *size in sizes) {
        sizeOfBytes += [size intValue]/2;
    }
    int bytes[sizeOfBytes];
    int counts = 0;
    for (NSString *word in words) {
        // convert each word from string to int
        NSMutableString *ostr = [NSMutableString stringWithCapacity:[word length]];
        while ([word length] > 0) {
            [ostr appendFormat:@"%@", [word substringFromIndex:[word length] - 2]];
            word = [word substringToIndex:[word length] - 2];
        }
    
        NSScanner *scaner = [NSScanner scannerWithString:ostr];
        unsigned int val;
        [scaner scanHexInt:&val];
        bytes[counts] = val;
        counts++;
    }
    // get NSData form c array
    NSData* data = [NSData dataWithBytes:bytes length:sizeOfBytes];
    NSLog(@"My NSDATA  %@",data);
    // your image is ready
    UIImage *image = [UIImage imageWithData:data];
    NSLog(@"image: %@",image);
    

    【讨论】:

    • 投了反对票,因为它没有以任何方式解释代码做什么,或者它应该做什么。因此,它没有回答问题,而只是将一段随机代码注入世界..
    • 我添加了一些 cmets,也许这有助于您了解发生了什么
    【解决方案2】:

    您在 NSLog 输出中看到的是字符串字符的 ASCII 码。 例如:

    NSString* str = @"A";
    NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding]; 
    NSLog(@"%@",data);
    

    你会看到类似的东西:

    那是因为 0x41 是字母 A 的代码。

    你的字符串也是如此。

    【讨论】:

    • 你必须提供一个你正在尝试做什么的场景。我不确定“字符串中的图像字节”是什么意思。
    【解决方案3】:

    数据正是您输入的内容:一个简单的字符串(打印为原始字节值)。但我猜你的输入字符串是一个十六进制转储,你需要手动转换成字节。

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      相关资源
      最近更新 更多