Как показать изображение из шестнадцатеричной строки [iphone]? - PullRequest
1 голос
/ 08 декабря 2011

I have such Hex code 89504e470d0a1a0a0000000d49484452000001000000010008060000005c72a8

теперь этот шестнадцатеричный код является кодом некоторого изображения. что я знаю, теперь я хочу показать это изображение в imageView. Я не знаю, как это сделать, потому что, когда я конвертирую этот Hex в NSData и пытаюсь преобразовать эти данные в изображение и когда я показываю это изображение. изображение не показывается.

Может кто-нибудь сказать мне, как это сделать?

// Это первая часть, т. Е. Преобразование изображения в гекс *

UIImage *img = [UIImage imageNamed:@"image.png"];
NSData *data1 = UIImagePNGRepresentation(img);

// NSLog (@ "data is% @", data1);

const unsigned *tokenBytes = [data1 bytes];
NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                      ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                      ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                      ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];

NSLog(@"hexToken is %@",hexToken);

1 Ответ

2 голосов
/ 08 декабря 2011

Если я правильно понимаю ваш вопрос, UIImage *image = [UIImage imageWithData:data]; - это то, что вам нужно.

Неверное преобразование NSData в гекс, вы берете только первые 8 байтов в качестве шестнадцатеричного токена;вместо этого используйте следующий код:

- (NSString*)stringWithHexBytes:(NSData *) data {
    static const char hexdigits[] = "0123456789ABCDEF";
    const size_t numBytes = [data length];
    const unsigned char* bytes = [data bytes];
    char *strbuf = (char *)malloc(numBytes * 2 + 1);
    char *hex = strbuf;
    NSString *hexBytes = nil;

    for (int i = 0; i<numBytes; ++i) {
        const unsigned char c = *bytes++;
        *hex++ = hexdigits[(c >> 4) & 0xF];
        *hex++ = hexdigits[(c ) & 0xF];
    }
    *hex = 0;
    hexBytes = [NSString stringWithUTF8String:strbuf];
    free(strbuf);
    return hexBytes;
}

Преобразование шестнадцатеричной строки обратно в NSData:

- (NSData *) hexStringToData:(NSString *) hexString
{
    unsigned char whole_byte;
    NSMutableData *returnData= [[NSMutableData alloc] init];
    char byte_chars[3] = {'\0','\0','\0'};
    int i;
    for (i=0; i < 8; i++) {
        byte_chars[0] = [hexString characterAtIndex:i*2];
        byte_chars[1] = [hexString characterAtIndex:i*2+1];
        whole_byte = strtol(byte_chars, NULL, 16);
        [returnData appendBytes:&whole_byte length:1]; 
    }
    return (NSData *) [returnData autorelease];
}
...