2013-05-19 77 views
1

我已經使用NSMutableData合併字節數組合併多少字節數組到目標C一個字節數組

NSMutableData *payload; 
    payload = [[NSMutableData alloc] init]; 

[payload appendBytes:CFBridgingRetain((cm.msgBytes)) length:[cm.msgBytes length]]; 

NSString *cmdata = [[NSString alloc] initWithData:[payload mutableBytes] encoding:NSUTF8StringEncoding]; 

我想繼續增加​​直到完成

cmdata始終是零

as initWithData需要NSData所以我把字節轉換爲NSData但結果仍然是一樣的

NSData *bytesData = [NSData dataWithBytes:[payload mutableBytes] length:[payload length]]; 

NSString *cmdata = [[NSString alloc] initWithData:bytesData encoding:NSUTF8StringEncoding]; 
+0

即使負載增長到零長度以上,字符串仍然爲零?你嘗試使用NSMutableString嗎? –

+0

是paylaod增長到零以上,我可以看到數據的十六進制,我沒有用過,因爲cm.msgBytes中的數據是字節數組 – skcrpk

回答

3

我覺得你在幾個地方混淆的東西。如果一個API表示「字節」,它就是指一個C字節數組;它說的是「數據」,它是指一個NSData對象。

假設cm.msgBytesNSData對象,這似乎是給你檢索其.length,一個更好的版本這個代碼是:

NSMutableData *payload; 
payload = [[NSMutableData alloc] init]; 

[payload appendData:cm.msgBytes]; 

NSString *cmdata = [[NSString alloc] initWithData:payload encoding:NSUTF8StringEncoding]; 

如果你寫的類cm屬於,你應該可能會將msgBytes重命名爲msgData(或甚至messageData),以更好地匹配API。

+0

嗯,你是對的,我是作爲一個C數組時,它是一個NSData的msgBytes,謝謝 – skcrpk

0

initWithData需要一個NSData而不是字節本身

NSString *cmdata = [[NSString alloc] initWithData:payload encoding:NSUTF8StringEncoding]; 
+0

這也不起作用 NSData * bytesData = [NSData dataWithBytes:[payload mutableBytes ]長度:[有效載荷長度]]; NSString * cmdata = [[NSString alloc] initWithData:bytesData encoding:NSUTF8StringEncoding]; – skcrpk