Проблема преобразования NSString в NSData - PullRequest
1 голос
/ 21 марта 2011

У меня есть несколько байтов изображения в моей строке, и я хочу нарисовать его в 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..........

Так что мои изображения не показывают ничего ..... пожалуйста, помогите

Ответы [ 3 ]

2 голосов
/ 22 марта 2011

если вопрос был: Как преобразовать строковые данные в изображение, то это ответ.

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);
1 голос
/ 21 марта 2011

в выводе NSLog вы видите ASCII-коды строковых символов.например:

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

вы увидите что-то вроде:

<41 .... </p>

, потому что 0x41 является кодом для буквыA.

То же самое происходит с вашей строкой.

0 голосов
/ 21 марта 2011

Данные в точности то, что вы их вводите: простая строка (выводится как необработанные байтовые значения).Но я полагаю, что ваша входная строка является hexdump, и вам нужно вручную превратить ее в байты.

...