Convert NSData to String?
I am storing a openssl private Key EVP_PKEY as nsdata. For this I am serializing into a byte stream using the code below
unsigned char *buf, *p;
int len;
len = i2d_PrivateKey(pkey, NULL);
buf = OPENSSL_malloc(len);
p = buf;
i2d_PrivateKey(pkey, &p);
where pkey is of type EVP_PKEY. Then I am storing the bytes from buffer 'p' as an NSData using the line given below
NSData *keydata = [NSData dataWithBytes:P length:len];
Now I am converting it to a NSString using the code given below but when i print it into console its giving some other characters.
NSString *content =[ NSString stringWithCString:[keydata bytes] encoding:NSUTF8StringEncoding];
Could someone help?
Basically I want to store the EVP_PKEY into a sqlite database
am I on the right track? Thanks.
Solution 1:
Objective-C
You can use (see NSString Class Reference)
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding
Example:
NSString *myString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
Remark: Please notice the NSData
value must be valid for the encoding specified (UTF-8 in the example above), otherwise nil
will be returned:
Returns nil if the initialization fails for some reason (for example if data does not represent valid data for encoding).
Prior Swift 3.0
String(data: yourData, encoding: NSUTF8StringEncoding)
Swift 3.0 Onwards
String(data: yourData, encoding: .utf8)
See String#init(data:encoding:) Reference
Solution 2:
Prior Swift 3.0 :
String(data: yourData, encoding: NSUTF8StringEncoding)
For Swift 4.0:
String(data: yourData, encoding: .utf8)