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的計數器也..看看會打印.. –