ios中的字节数组

owe*_*rig 0 objective-c ipad ios

我正在尝试转换此Javascript代码:

self.userSerialEvent = function (join, value, tokens) {
        var type = join.charCodeAt(0);
        var rawJoin = parseInt(join.substr(1)) - 1;
        var rawValue = parseInt(value);
        self.SJValues[join] = value;

        var payload = "\x00\x00" + String.fromCharCode(value.length + 2) + "\x12" + String.fromCharCode(rawJoin) + value;
        self.sendMsg("\x05\x00" + String.fromCharCode(payload.length) + payload);
    };
Run Code Online (Sandbox Code Playgroud)

到ipad应用程序的目标c代码.但是我无法弄清楚如何正确地形成这个如果我做一个char数组我不能有可变长度(这将在将值添加到数组时发生).当我尝试使用NSMutableArray时,我无法插入字节,加上我的网络发送操作需要NSData,我无法将NSMutableArray转换为数据.我也试过NSString但是当我这样做时:

NSString * payload = [NSString stringWithFormat:@"0000%d12%d%@",value.length+2,rawJoin,[value dataUsingEncoding:NSASCIIStringEncoding]];
Run Code Online (Sandbox Code Playgroud)

我得到字符串中的数据周围的<>.我试图创建一个字符集并从字符串中删除"<>",但只删除了最后一个(离开开头<那里)

我的问题是:我如何形成一个字节数组,它具有可变长度并能够将该数组转换为NSData

rob*_*off 5

听起来像你在寻找NSMutableData.

NSMutableData *payload = [[NSMutableData alloc] init];
[payload appendBytes:"\000\000" length:2];
uint8_t length = value.length + 2;
[payload appendBytes:&length length:1];
[payload appendBytes:"\022" length:1];
// etc.
Run Code Online (Sandbox Code Playgroud)