如何将 NSString 转换为 NSData?并且数据与字符串内容相同
Posted
技术标签:
【中文标题】如何将 NSString 转换为 NSData?并且数据与字符串内容相同【英文标题】:how can I translate a NSString to NSData? And the data has the same content as the string 【发布时间】:2011-01-26 06:54:09 【问题描述】:NSString * theString=@"e88d";
NSData * data;
// something I should implement
NSLog(@"%@", theString);
NSLog(@"%@",[data description]);
我希望两次打印的结果相同。
AES加解密:
(1).服务器:
如果明文是@"abcd";
AES 加密的data(NSData data type)
是"d882830c dc892036 4345839f 13c7516a"
(2).在我的本地应用程序中,我的代码是:
NSData*data=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://..."]];
NSString * mystring= [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
但是,要成功解密数据,我必须有一个等于"d882830c dc892036 4345839f 13c7516a"
的data(NSData date type)
。但等于正确值的是 mystring(NSString data type)
而不是 data(NSData data type)
。
加密和解密函数都需要data(NSData data type)
作为输入数据。
- (NSData*)AES128EncryptWithKey:(NSString*)key;
- (NSData*)AES128DecryptWithKey:(NSString*)key;
【问题讨论】:
你的意思是要将字符串@"e88d"
转换成2字节的数据0xe8,0x8d
?
我的意思是,如果我尝试 NSLog(@"%@",data); gdb 将显示:“e88d”
你想要达到什么目的?我的意思是你打算用 NSData 对象做什么?或许我们可以提供更清晰的答案。
NSString * theString=@"abcd"; NSData * 数据; // 代码 NSLog(@"%@", theString); NSLog(@"%@",[数据描述]);我希望两次打印的结果是一样的。
@someone:除非你想打破很多惯例,否则这是不可能的。 NSData 的描述总是采用<12345678 abcdef01 99>
的形式
【参考方案1】:
我想这可能会回答你的问题
How do I convert a NSString value to NSData?
【讨论】:
嗯,打印出来的数据和字符串不一样。 可能是因为您在NSLog(@"%@",data);
中使用的 %@ 需要一个 NSString 对象,所以您传递的是一个 NSData 对象。
如果我使用NSLog(@"%@",[数据描述]),希望gdb显示:e88d。如何获取数据?
AES加解密:服务器:如果明文为:@"abcd"; AES 加密数据(NSData 数据类型)在我的本地应用程序中是:“d882830c dc892036 4345839f 13c7516a”,我的代码是:NSData*data=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://..."]] ; NSString * mystring= [[NSString alloc] initWithData:数据编码:NSUTF8StringEncoding];但是,要解密 AES 加密字符串,我必须得到一个等于“d882830c dc892036 4345839f 13c7516a”的数据(NSData 日期类型)。但它是 mystring(NSString 数据类型)而不是数据(NSData 数据类型)等于正确的值。【参考方案2】:
您要设置的描述不是特定于实例的值。这是类/对象的描述。 NSData 将有类似的描述:“这是一个数据对象”。你可以通过重写方法来重写这个值。
- (NSString *)description
return @"e88d"; //normally used for class description
当然,您必须为此继承 NSData 对象,然后像上面的代码一样覆盖描述。
附言。我认为您不想为此使用 description 来解释它在每个类中的用途。
你可能想要的是:
NSString * theString=@"e88d";
NSData * data=[theString dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", theString);
NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
【讨论】:
【参考方案3】:@interface NSString (Joke)
- (NSString *)description;
@end
@implementation NSString (Joke)
- (NSString *)description
return @"Panda!";
@end
@interface NSData (Joke)
- (NSString *)description;
@end
@implementation NSData (Joke)
- (NSString *)description
return @"Panda!";
@end
【讨论】:
过于复杂,更简单更通用的解决方案:#define NSLog(...) NSLog(@"Panda!")
【参考方案4】:
这个怎么样
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://..."]];
NSData *decryptedData = [data AES128DecryptWithKey:key];
NSString *mystring = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding];
【讨论】:
以上是关于如何将 NSString 转换为 NSData?并且数据与字符串内容相同的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将 NSData 转换为 NSString? [复制]
如何将 NSString 转换为 NSData?并且数据与字符串内容相同