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等(无前导零)
只要把NSLog的计数器也..看看会打印.. –