【发布时间】:2013-12-12 22:12:22
【问题描述】:
如何将下面的代码转换为NSString?
std::cout << "Cipher Text (" << ciphertext.size() << " bytes)" << std::endl;
for( int i = 0; i < ciphertext.size(); i++ ) {
std::cout << "0x" << std::hex << (0xFF & static_cast<byte>(ciphertext[i])) << " ";
}
std::cout << std::endl << std::endl;
我试过了:
NSString *cyp = [NSString stringWithUTF8String:ciphertext.c_str()];
但是cyp NSString 是空的..
NSString *cyp = @(ciphertext.c_str());
NSLog(@"cypher %@",cyp);
NSLog(@"cypher %s",ciphertext.c_str());
打印出来:
Pas[8044:70b] playntext Now is the time for all good men to come to the aide...
2013-11-27 14:38:01.421 Pas[8044:70b] cypher (null)
2013-11-27 14:38:01.422 Pas[8044:70b] cypher ¯≥Íä≥z=(fúóß≥¢P%Ä’“2ŒË
W3ÔpˇHÈËò©¬^ß∞@C°¸#±°Î≤ˆóbp°Å nxÄê
2013-11-27 14:38:01.423 Pas[8044:70b] decrypted Now is the time for all good men to come to the aide...
那么为什么我可以像字符串一样打印出来却不能从“密文”创建一个NSString
【问题讨论】:
-
NSString stringWithCString:encoding: 使用不同的编码。还要检查 ciphertext.c_str() 返回值 :)
-
几乎可以肯定该字符串不是以 UTF8 编码的
-
或者(仔细检查后似乎就是这种情况),它确实是密文,在这种情况下它不是真正的“字符串”——它不是字符数据。
-
要打印密文,您应该以十六进制(一个单独的问题)或 Base64 打印。
标签: c++ ios objective-c