【问题标题】:How to convert Hexadecimal NSData to Decimal array?如何将十六进制 NSData 转换为十进制数组?
【发布时间】:2013-10-04 10:01:41
【问题描述】:

我有一个十六进制值的数组,如下所示:

const UInt8 request_MifareID[] = {
        0x00, 0xCA, 0x01, 0x0A, 0x00
    };

然后我将其传输到 NSData 进行通信:

NSData *data = [[NSData alloc] initWithBytesNoCopy:(UInt8 *)request_MifareID length:5];

向服务器发送“数据”并获得服务器响应:

Printing description of resp:
<ee97562d 02280400 00000000 21074400 9000>

NSUInteger len = [resp length];

Printing description of len:
(NSUInteger) len = 18

“resp”也是一个十六进制格式的NSData

现在,我必须将“resp”转移到十进制数组

我该怎么办?

----------------------------------------------- --------编辑

好的,首先

我必须传输服务器响应的 NSData(它不是字符串,只是数字):

ee97562d 02280400 00000000 21074400 9000

进入什么样的物体?

字节?

当我使用时

NSString * str = [[NSString alloc] initWithData: resp
                                           encoding:NSUTF8StringEncoding];

它返回零

【问题讨论】:

  • 内存中的表示不是“十进制”或“十六进制”。它不取决于你如何格式化它。做NSLog(@"%u", ((uint8_t *)[data bytes])[0]),然后瞧。
  • 请参阅关于此主题的另一个 SO 线程:stackoverflow.com/questions/19066246/…
  • 是的,数据不是“十六进制”。为了您的方便,它只是以十六进制格式显示。
  • 当您执行 NSString initWitData 时,您会得到一个 nil 结果,因为 NSData 对象的内容不是合法的 UTF8 字符代码数据。

标签: iphone ios


【解决方案1】:
int number = 0xe; // or 0x3, 0x6, 0x8, 0x2

NSString * decimalString = [NSString stringWithFormat:@"%d", number];
NSString * hexString = [NSString stringWithFormat:@"%x", number];

【讨论】:

    【解决方案2】:
    **NSData *data = [NSData dataWithBytes:"FF3C" length:4];
    NSString *string = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
    string = [@"0x" stringByAppendingString:string];
    
    unsigned short value;
    sscanf([string UTF8String], "%hx", &value);
    
    NSLog(@"%d", value)**
    

    【讨论】:

    • 字符串将返回 nil
    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2015-09-13
    • 2013-10-08
    • 2013-06-18
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多