将NSData转换为String?

Zac*_*ach 115 sqlite iphone openssl nsdata ios

我将openssl私钥EVP_PKEY存储为nsdata.为此,我使用下面的代码序列化为字节流

unsigned char *buf, *p;
int len;
len = i2d_PrivateKey(pkey, NULL);
buf = OPENSSL_malloc(len); 
p = buf;
i2d_PrivateKey(pkey, &p);
Run Code Online (Sandbox Code Playgroud)

其中pkey的类型为EVP_PKEY.然后我使用下面给出的行将缓冲区'p'中的字节存储为NSData

NSData *keydata = [NSData dataWithBytes:P length:len];
Run Code Online (Sandbox Code Playgroud)

现在我使用下面给出的代码将它转换为NSString但是当我将它打印到控制台时它会给出一些其他字符.

NSString *content =[ NSString stringWithCString:[keydata bytes] encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

基本上我想将EVP_PKEY存储到sqlite数据库中

我在正确的轨道上吗?谢谢.

lou*_*uio 254

Objective-C的

你可以使用(参见NSString类参考)

- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding
Run Code Online (Sandbox Code Playgroud)

示例:

NSString *myString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

:请注意该NSData值必须对指定的编码有效(上例中为UTF-8),否则nil将返回:

如果由于某种原因初始化失败,则返回nil(例如,如果数据不表示编码的有效数据).

之前的Swift 3.0

String(data: yourData, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)

Swift 3.0

String(data: yourData, encoding: .utf8)
Run Code Online (Sandbox Code Playgroud)

请参见String#init(data:encoding :)参考

  • 在调试器上:`po [[NSString alloc] initWithData:myData encoding:4]` (26认同)
  • 即使`NSData`可能包含任何字节值,包括那些在UTF-8范围之外的字节值,这个答案如何有多个赞成? (6认同)
  • 因为这里的人正在将数据响应从服务器转换为字符串. (2认同)

pie*_*e23 23

之前的Swift 3.0:

String(data: yourData, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)

对于Swift 4.0:

String(data: yourData, encoding: .utf8)
Run Code Online (Sandbox Code Playgroud)