Nazik
Nazik

Reputation: 8444

How to get NSData value in NSString

I'd tried the following

-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
{
  imagedata = UIImageJPEGRepresentation([info objectForKey:@"UIImagePickerControllerOriginalImage"],1); 

  NSString *s1 = [[[NSString alloc]initWithData:imagedata encoding:NSUTF8StringEncoding]autorelease];

  NSString *s2 = [[[NSString alloc]  initWithBytes:[imagedata bytes]
                                              length:[imagedata length] encoding: NSUTF8StringEncoding]autorelease];

  NSString *s3 = [NSString stringWithUTF8String:[imagedata bytes]];


  [picker dismissModalViewControllerAnimated:YES];

}

if I see the Printing description of imagedata: in Debugger Console,I can see the blob value there. But I cant get that in NSString , all the above s1,s2,s3 returns null value. I want to upload the blob value of the image to remote server database. What's The solution for it?

Upvotes: 2

Views: 1827

Answers (3)

Jon
Jon

Reputation: 7918

If you want to see the raw binary / hex values of your data as a string value, do this:

NSString *hashString = [data.description stringByReplacingOccurrencesOfString:@" " withString:@""];

// Remove brackets < > from the end
hashString = [hashString substringWithRange:NSMakeRange(1, hashString.length-2)];

I used this because I wanted to verify my sha512 data values.

Upvotes: 0

Ronak
Ronak

Reputation: 974

Try this

NSString* aStr = [[NSString alloc] initWithData:aData encoding:NSASCIIStringEncoding];

it worked for me.

Upvotes: 2

Incredible
Incredible

Reputation: 86

You are trying to convert image into NSString using various encoding methods which will return you null because you can not convert UIImage to NSString.

The alternative is to use base64 encoding function to convert into NSString Add this piece of code in your class:

static char base64EncodingTable[64] = 
{
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
};

@implementation NSString (NSStringAdditions)

+ (NSString *) base64StringFromData: (NSData *)data length: (int)length 
{
    unsigned long ixtext, lentext;
    long ctremaining;
    unsigned char input[3], output[4];
    short i, charsonline = 0, ctcopy;
    const unsigned char *raw;
    NSMutableString *result;

    lentext = [data length]; 
    if (lentext < 1)
        return @"";
    result = [NSMutableString stringWithCapacity: lentext];
    raw = [data bytes];
    ixtext = 0; 

    while (true) 
    {
        ctremaining = lentext - ixtext;
        if (ctremaining <= 0) 
            break;        
        for (i = 0; i < 3; i++) 
        { 
            unsigned long ix = ixtext + i;
            if (ix < lentext)
                input[i] = raw[ix];
            else
                input[i] = 0;
        }
        output[0] = (input[0] & 0xFC) >> 2;
        output[1] = ((input[0] & 0x03) << 4) | ((input[1] & 0xF0) >> 4);
        output[2] = ((input[1] & 0x0F) << 2) | ((input[2] & 0xC0) >> 6);
        output[3] = input[2] & 0x3F;
        ctcopy = 4;
        switch (ctremaining) 
        {
            case 1: 
                ctcopy = 2; 
                break;
            case 2: 
                ctcopy = 3; 
                break;
        }

        for (i = 0; i < ctcopy; i++)
            [result appendString: [NSString stringWithFormat: @"%c", base64EncodingTable[output[i]]]];

        for (i = ctcopy; i < 4; i++)
            [result appendString: @"="];

        ixtext += 3;
        charsonline += 4;

        if ((length > 0) && (charsonline >= length))
            charsonline = 0;
    }     
    return result;
}

@end

and then use following statement to convert into NSString:

NSString *fileStream=[NSString base64StringFromData:imagedata length:[imagedata length] ];

Upvotes: 3

Related Questions