2015-11-09 65 views
1

我組裝NSData對象和我得到的開頭刪除數據如下從NSData對象

0100020000 

這是我想除了前導零的東西。我需要它是

100020000 

我試過下面的代碼。但它留給我00020000.

NSRange range = NSMakeRange(0, 1); 
[byteRequest replaceBytesInRange:range withBytes:NULL length:0]; 

任何想法?謝謝。

+2

從您的問題中很難判斷數據實際是什麼樣子。那些十六進制字節的字符串?文本?如果它是十六進制字節,那麼每對*數字代表一個字節,這意味着你試圖從正面移除一半的字節 - 這不會在沒有很多額外的位操作的情況下工作。但這是一個非常不尋常的要求,所以我的猜測是,你實際上是在做一些不同的事情。你能詳細說明數據代表什麼和你需要什麼嗎? –

+0

它是一個十六進制字節的字符串。我想出了一個更好的方法來做到這一點。我正在將每件作品轉換爲NSData並添加它。如果我將整個字符串轉換爲NSData,它將解決我的問題。最後的零將會很好。謝謝。 –

回答

0

鑑於你的描述,你有以下5個字節:

1,0,2,0,0

你以某種方式轉化,爲十六進制,其每字節兩位數字產生:

「01 00 02 00 00」

但是,這只是前面字節的文本表示。它相當於所有這些:

「0100020000」

「0x0100020000」

「4295098368」(十進制) 「040000400000」(八進制)

你出現在一個想要:「100020000」

就像「1.00」等於「1.0」,「01」等於「1」。

如果你的目標是讓所有的字節串爲兩位數的字符串,除了第一,按照要求應該只有儘可能多的數字,那麼這裏就是一個很好的例子:

int bytes[5] = {1, 0, 2, 0, 0}; 
NSString *str = [NSString stringWithFormat:@"%x%02x%02x%02x%02x", bytes[0], bytes[1], bytes[2], bytes[3], bytes[4]]; 

如果字節數未知,您可以使用循環並追加這些字符。從%x開始,然後使用%02x進行後續操作。