2012-12-20 28 views
2
NSString *counter = [[NSString alloc] initWithBytes:buffer+1 length:11 encoding:NSUTF8StringEncoding]; //@"003{of}004" 
NSString *c1Str = [counter substringToIndex:4]; 
NSString *c2Str = [counter substringFromIndex:8]; 

int c1Int = [c1Str intValue]; 
int c2Int = [c2Str intValue]; 

NSLog(@"c1Str=%@; c2Str=%@; c1Int=%i; c2Int=%i", c1Str, c2Str, c1Int, c2Int); 

//The output is 
//c1Str=003; c2Str=004; c1Int=0; c2Int=4 

所以我得到0(零)为c1Int而c2Int是好的。 绝对相同的结果是,如果我使用:NSString intValue返回0,如果我从一个字节缓冲区取自一个字符串的开始substring它

NSArray *counterValues = [counter componentsSeparatedByString:@"{of}"]; 
int c1Int = [[counterValues objectAtIndex:0] intValue]; 
int c2Int = [[[counterValues objectAtIndex:1] intValue]; 

我从我从NSInputStream读取字节的缓冲区计数器。直接将*计数器定义为@“003 {of} 004”正常工作。

这是为什么? * c1Str中的特殊之处在于intValue将其视为零?我该如何对付它?

感谢

编辑: 问题不在于实际了我。但它可能对其他人有用。 我无法理解和解决我设定的任务。我不得不重新思考并改变我的工作流程。

我想给出更详细的问题根源。 我通过网络传输PNG文件并接收ios上的数据。这个想法是发送一个从文件中读取的字节数组,并附加了领先的特殊标签,以通知文件即将到来以及计数器是什么。

所以发送的结构如下: [6] [003] [004] [文件数据包],其中“[”和“]”括号仅供您在这里了解结构。我提到数据来到NSInputStream,我可以捕获[6],并且我可以捕获[003 {004],并且我可以捕获其余的数据。 NSLog显示清楚。但是对于计数器字符串来说真的很奇怪,我会说这个字符串的开头是奇数。

首先,是的,如果我试图通过子串来检索零件,那么我必须使用奇怪的索引。

intValue返回0无论我用什么方法检索003和004,004一直按照预期正确处理!

如果有人可以解释为什么会发生这种情况(理想情况下是工作解决方案),这将是绝对有用的和非常感谢。

非常感谢所有回复的人。

P.S.我通过单独发送计数器作为字符串解决这个问题,在开始时附加了不同的通知标记。由于我现在不需要一个固定长度的计数器,所以我的数值只是数字:3 {of} 4,或121 {of} 784等(无前导零)

+0

只要把NSLog的计数器也..看看会打印.. –

回答

0

我不知道为什么您的c1Str在日志中打印为003

变化

[counter substringToIndex:4]; 

[counter substringToIndex:3]; 

如果您counter字符串003{of}004

+0

的指标是正确的。如果我定义NSString * counter = @“003 {of} 004”,那么我得到的值是3和4.并且如上所述,我尝试了其他方法来检索这些部分。日志也显示正确的字符串。 –

0

你有错输出,如果你的字符串为 “{中} 003 004” @你必须使用另一个索引!

NSString *c1Str = [counter substringToIndex:3]; 
NSString *c2Str = [counter substringFromIndex:7]; 
+0

索引是正确的。如果我定义NSString * counter = @“003 {of} 004”,那么我得到的值是3和4.并且如上所述,我尝试了其他方法来检索这些部分。日志也显示正确的字符串。 –

+0

我试过你的代码与子字符串,我得到像“003 {”和“04”,并与组件的代码工作正常的字符串。可能是计数器字符串中的问题? – Moonkid

相关问题