【问题标题】:Converting NSData as string to NSString将 NSData 作为字符串转换为 NSString
【发布时间】:2015-11-30 05:55:24
【问题描述】:

如果我将 NSData 转换为字符串,像这样

NSString *someString = [NSString stringWithFormat:@"%@", hashedData];

如何将 someString 转换回 hashedData?

例如在下面的代码中

NSString *string = @"This is a string";

NSData *data1 = [string dataUsingEncoding:NSUTF8StringEncoding];

NSLog(@"data: %@",data1);
NSString *dataString = [NSString stringWithFormat:@"%@",data1];
NSData* data2 = [dataString dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"data2: %@",data2);

我得到以下输出

data1: <54686973 20697320 61207374 72696e67>
data2: <3c353436 38363937 33203230 36393733 32302036 31323037 33373420 37323639 36653637 3e>

我想要的是data2应该和data1一样。我的意思是将 dataString 转换回原来的 hashedData。

【问题讨论】:

标签: ios objective-c nsstring nsdata


【解决方案1】:

像这样替换你的代码:

NSString *string = @"This is a string";   
NSData *data1 = [string dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"data: %@",data1);
NSString *dataString = [NSString stringWithUTF8String:[data1 bytes]];
NSData* data2 = [dataString dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"data2: %@",data2);

输出:

Demoapp[1024:22267] 数据: 2015-09-04 12:52:10.104 Demoapp[1024:22267] data2:

【讨论】:

  • 这并不能解决问题。请查看更新。
  • 我测试了这段代码,dataString 变成了 nil。我的问题已经被stackoverflow.com/a/28295543/1801544 解决了。非常感谢您的宝贵时间。
【解决方案2】:

将数据转换为字符串:-

 NSData *data ;
 NSLog(@"data is :%@",data);
 NSString *strr = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
 NSLog(@"Responce is : %@",strr);

现在将字符串转换为数据:-

 NSData *dataa = [strr dataUsingEncoding:NSUTF8StringEncoding];
 NSLog(@"data is :%@",dataa);


 2015-09-04 12:43:54.502 TokenPic[2003:60b] data is :<7b227375 63636573 73223a22 31222c22 706f7374 73223a22 4576656e 74204372 65617465 64205375 63636573 7366756c 6c792e22 7d>
 2015-09-04 12:44:01.165 TokenPic[2003:60b] Responce is : {"success":"1","posts":"Event Created Successfully."}
 2015-09-04 12:44:02.801 TokenPic[2003:60b] data is :<7b227375 63636573 73223a22 31222c22 706f7374 73223a22 4576656e 74204372 65617465 64205375 63636573 7366756c 6c792e22 7d>

【讨论】:

    【解决方案3】:

    您不能直接将NSData 分配给NSString,您必须像这样将 NSData 转换为 NSString

    NSString *dataString = [[NSString alloc] initWithData:data1 encoding:NSUTF8StringEncoding];
    

    检查更新的代码

    NSString *string = @"This is a string";
    
    NSData *data1 = [string dataUsingEncoding:NSUTF8StringEncoding];
    
    NSLog(@"data: %@",data1);
    NSString *dataString = [[NSString alloc] initWithData:data1 encoding:NSUTF8StringEncoding];
    NSData* data2 = [dataString dataUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"data2: %@",data2);
    

    现在NSData 都是一样的

    【讨论】:

      【解决方案4】:

      在 Swift 1.2 中将 NSData 转换为 NSString

      let stringFromData = NSString(data: data, encoding: NSUTF8StringEncoding)
      

      在 Swift 1.2 中将 NSString 转换为 NSData

      let dataFromString = myString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-19
        • 2011-11-23
        相关资源
        最近更新 更多