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
所以我得到 c1Int 的 0(零),而 c2Int 很好。绝对相同的结果是如果我使用:
NSArray *counterValues = [counter componentsSeparatedByString:@"{of}"];
int c1Int = [[counterValues objectAtIndex:0] intValue];
int c2Int = [[[counterValues objectAtIndex:1] intValue];
我从从 NSInputStream 读取的字节缓冲区中获取计数器。将 *counter 直接定义为 @"003{of}004" 可以正常工作。
为什么会这样?*c1Str 中有什么特别之处以至于 intValue 将其视为零?我该如何对抗它?
谢谢
编辑: 这个问题对我来说不再是实际的了。但它可能对其他人有用。我无法按照设定的方式理解和解决我的任务。我不得不重新思考并改变我的工作流程。
我想详细说明问题的根源。我通过网络传输 png 文件并在 ios 上接收数据。这个想法是发送一个从文件中读取的字节数组,并附加前导特殊标签以通知文件即将到来以及计数器是什么。
所以发送的结构如下:[6][003{of}004][文件数据包],其中“[”和“]”括号仅供您理解结构。
正如我提到的,数据来自 NSInputStream,我可以捕获 [6],我可以捕获 [003{of}004],我可以捕获其余数据。NSLog 清楚地显示了它。但是计数器字符串确实很奇怪,我会说字符串开头的东西很奇怪。
首先,是的,如果我尝试通过对它们进行子串化来检索这些部分,那么我必须使用奇怪的索引。
无论我使用什么方法来检索 003 和 004,intValue 都会返回 0,而 004 总是按预期正确处理!
如果有人可以解释为什么会发生这种情况(理想情况下是一个可行的解决方案),那绝对是有用的,非常感谢。
非常感谢所有回复的人。
PS我通过将计数器作为字符串单独发送来解决此问题,并在开头附加了不同的通知标签。因为我现在不需要固定长度的计数器,所以我的值只是数字:3{of}4 或 121{of}784 等(没有前导零)