Я пытаюсь преобразовать этот код 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);
};
в Objective C код для приложения Ipad. Однако я не могу понять, как правильно сформировать это Если я делаю массив символов, у меня не может быть переменной длины (что произойдет, когда значение будет добавлено в массив). И когда я пытаюсь использовать NSMutableArray, я не могу вставить байты, плюс моя операция отправки сети принимает NSData, и я не могу преобразовать NSMutableArray в данные. Я также попытался NSString, но когда я делаю:
NSString * payload = [NSString stringWithFormat:@"0000%d12%d%@",value.length+2,rawJoin,[value dataUsingEncoding:NSASCIIStringEncoding]];
Я получаю <> вокруг данных в строке. Я попытался создать набор символов и удалить «<>» из строки, но только удалил конец один (оставив начало < там)
Мой вопрос заключается в следующем: как я могу сформировать массив байтов, который имеет переменную длину и способен преобразовать этот массив в NSData
Огромное спасибо, я должен был представить nsmutabledata. еще раз спасибо. (5 минут, пока я не могу принять) –
Я делал 0x01 для шестнадцатеричных байтов, но для этого я буду использовать/001? –
@owengerig 0x01 - это целочисленный литерал с этим шестнадцатеричным значением. Если вы поместите его в строку, то это будет только поток символов из 0, за которым следует x, за которым следует 0, и далее. Строки C (используемые здесь) позволяют вводить значения байтов непосредственно в последовательность символов с помощью \ ooo, где каждый o является восьмеричной цифрой или \ xhh, где h - шестнадцатеричная цифра (что, по-видимому, является тем, что вы делаете в Java original?) – Tommy