简体   繁体   English

如何在NSString中获取NSData值

[英]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. 如果在调试器控制台中看到imagedata的打印说明:,我可以在其中看到blob值。 But I cant get that in NSString , all the above s1,s2,s3 returns null value. 但是我无法在NSString中得到所有上述s1,s2,s3返回空值。 I want to upload the blob value of the image to remote server database. 我想将图像的Blob值上传到远程服务器数据库。 What's The solution for it? 解决方案是什么?

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. 您正在尝试使用各种编码方法将图像转换为NSString,这将使您返回null,因为您无法将UIImage转换为NSString。

The alternative is to use base64 encoding function to convert into NSString Add this piece of code in your class: 另一种方法是使用base64编码函数将其转换为NSString在您的类中添加以下代码:

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:

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

Try this 尝试这个

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

it worked for me. 它为我工作。

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. 我之所以使用它,是因为我想验证我的sha512数据值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM