2011-09-29 72 views
0

我努力去解决这个问题,但我花了很多时间在这么简单的事情上,所以我希望有人能给我答案。 看到下面的图像,但基本上我只是试图建立一个范围,但我的标记和我的列表永远不会见,即使有符合标准的项目。
在下面的示例中,我正在寻找2c,并且该数组在11的位置上,但刚好超过它。
enter image description here十六进制不正确评估

我已经尝试了几种不同的方式,而且它上面的比较工作得很好,所以我不明白在我的问题。 我已经尝试只是说

== 0x2c(从不计算)

或使用该就像我上面

`intValue` 

但是这使它获得二维,从我的测试是一个比赛,因为它截断数字下降到只有普通的2

实际代码:

int lastIndexInPayload = ([payload count]-1); 
      int beginningOfData = ([payload count]-1); 
      NSString * endOfLine = [NSString stringWithFormat:@"%02X", 0x0D]; 
      NSString * startOfLine = [NSString stringWithFormat:@"%02X", 0x2C]; 

      if ([[payload objectAtIndex:lastIndexInPayload]intValue] == [endOfLine intValue]) { 

       while ([payload objectAtIndex:beginningOfData]!= startOfLine) { 
        beginningOfData--; 
        DDLogVerbose(@"beginningOfData %d",beginningOfData); 

       } 
      } 

的有效载荷字节 数组从NSData的从插座回报

+2

请发布实际的代码,而不仅仅是它的图片。调试器的图片有帮助,但它可以帮助我们复制/更正/粘贴实际的代码。 –

回答

1

我想这是因为你使用==比较对象服用。因为它似乎都阵列,并且您的startOfLine对象是代表一个字节,仅十六进制的字符串,你应该只使用-isEqualToString:,如

while (![[payload objectAtIndex:beginningOfData] isEqualToString:startOfLine]) { 

这么说,我觉得很奇怪,你的有效载荷是一个数组十六进制字节表示为字符串为什么不把整个事情推到一个NSData中,而是可以访问“真正的”字节呢?

+0

@owengerig:在这种情况下两个字符串相等的两个对象不一定是相同的对象指针。如果你使用'char *',你会遇到同样的问题。 'strcmp()'所说的两个'char *'是相同的,可能是单独指向包含相同内容的单独内存块的指针。作为一般规则,除非你真的真的想知道它是否是完全相同的对象(而不仅仅是相等),否则'=='在Obj-C对象上是无用的。 –

+0

谢谢。我一直在努力做到这一点,因为我在某个时间点迷路了。但我想这是因为我有一个对象(从索引对象返回),并试图查看它是否等于字符串对象。这就是为什么我冒险intValue,stringValue和喜欢。 –

1

您正在比较字符串的地址而不是其内容,您应该使用while (![[payload objectAtIndex:beginningOfData] isEqualToString:startOfLine])。另外你为什么要尝试使用十六进制值的字符串,而不是直接与0xD进行比较?您对intValue的调用将导致0 for endOfLine,因为它不知道它是十六进制,并且将停止尝试解析数字。

+0

当我把0x2c vs startofline我得到一个糟糕的执行错误。你可以从我的其他条件陈述中看到我做到了这一点,并且工作。我标记了这一点,因为它确实回答了为什么(地址,而不是内容)这是有点什么我想,但无法掌握 –

+0

我会认为这是因为0x2c不是一个字符串其数字 –