2012-01-27 2 views
0

Я пытаюсь преобразовать этот код 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

ответ

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. 
+0

Огромное спасибо, я должен был представить nsmutabledata. еще раз спасибо. (5 минут, пока я не могу принять) –

+0

Я делал 0x01 для шестнадцатеричных байтов, но для этого я буду использовать/001? –

+0

@owengerig 0x01 - это целочисленный литерал с этим шестнадцатеричным значением. Если вы поместите его в строку, то это будет только поток символов из 0, за которым следует x, за которым следует 0, и далее. Строки C (используемые здесь) позволяют вводить значения байтов непосредственно в последовательность символов с помощью \ ooo, где каждый o является восьмеричной цифрой или \ xhh, где h - шестнадцатеричная цифра (что, по-видимому, является тем, что вы делаете в Java original?) – Tommy

Смежные вопросы