2012-12-20 29 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

相關問題