2013-05-19 75 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