【问题标题】:How to convert NData populated with hex values to NSString如何将填充有十六进制值的 NData 转换为 NSString
【发布时间】:2012-10-16 03:23:21
【问题描述】:

我有一个 NSdata 对象,其中填充了一堆十六进制格式的信息。我正在尝试将其转换为正确的字符串表示形式,但正在努力取得任何成功。

我尝试过的一件事是简单地将其放入 NSString 中,然后使用特殊字符标识符对其进行 NSLog 操作。忘记了单词 (%02x),但是要做到这一点,我将其编码为 NSUTF16 .. 我不想做.. 我很想看看我得到的数据到底是什么样的 NSString。

我这样做的原因是因为我稍后在我的代码中遇到了一些编码问题,我不确定是因为我收到的数据不正确还是我在处理时在某个时候填充了它它。

任何帮助将不胜感激。

【问题讨论】:

    标签: ios nsstring nsdata nslog


    【解决方案1】:

    您可以像这样获得 NSData 的字符串表示形式:

    NSData *data = (your data)
    NSString *string = [NSString stringWithCString:[data bytes] encoding:NSUTF8StringEncoding];
    

    这能回答你的问题吗?

    【讨论】:

      【解决方案2】:

      可能我没看懂,不过是这样的:

      NSData *yourData;
      NSLog(@"%@", [yourData description]);
      

      不符合您的需要?

      【讨论】:

      • hrmm 正在尝试,我阅读了一些关于“描述”的内容,但在开发文档中找不到如何使用它。
      • 不,这不符合我的需要。它向我展示了十六进制格式的数据,我想翻译它,这样我就可以准确地阅读它所说的内容。
      【解决方案3】:

      试试看 -

      -(NSString*)hexToString:(NSData*)data{
          NSString *hexString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
          if (([hexString length] % 2) != 0)
              return nil;
      
          NSMutableString *string = [NSMutableString string];
      
          for (NSInteger i = 0; i < [hexString length]; i += 2) {
      
              NSString *hex = [hexString substringWithRange:NSMakeRange(i, 2)];
              NSInteger decimalValue = 0;
              sscanf([hex UTF8String], "%x", &decimalValue);
              [string appendFormat:@"%d", decimalValue];
          }
      
          return string;
      }
      

      【讨论】:

      • Hrmm .. 所以我读得越多,我想我发现虽然数据代表 HEX .. 它实际上是 UNICODE 编码的.. 但仍然是 HEX 所以现在我试图弄清楚如何直接编码为 UTF16
      猜你喜欢
      • 2011-03-04
      • 1970-01-01
      • 2012-06-16
      • 2011-05-15
      • 2017-04-03
      • 2013-01-31
      • 2011-09-04
      • 1970-01-01
      相关资源
      最近更新 更多