1

我曾经用于NSMutableData合并字节数组

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

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

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

我想继续添加payload直到完成

cmdata 始终为零

因为initWithData需要NSData所以我将字节转换为NSData但结果仍然相同

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

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

2 回答 2

3

我认为你在几个地方混淆了事情。API 说“字节”的地方,它指的是 C 字节数组;在它说“数据”的地方,它正在谈论一个NSData对象。

假设cm.msgBytes是一个NSData对象,似乎给定您检索它的对象,则.length此代码的更好版本将是:

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

[payload appendData:cm.msgBytes];

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

如果您编写了cm所属的类,您可能应该重命名msgBytesmsgData(甚至messageData),以更好地匹配 API。

于 2013-05-19T02:43:00.997 回答
0

initWithData 需要一个 NSData 而不是字节本身

NSString *cmdata = [[NSString alloc] initWithData:payload encoding:NSUTF8StringEncoding];
于 2013-05-19T02:16:48.897 回答