2015-04-11 4 views
0

Вот пример потока данных (в буфере). 0x81 - это конец каждого блока, необходимо обработать логику до следующего 0x81.Как обрабатывать буфер nodejs (неопределенная длина)

Факс: 00: 00: 00: 00: 00: : 00: 14: 04: 00: 00: 10: 03: 42: 57: 47: 03: 0c: 00: 14: 00: 04: 4b: 31: 01: 01: f4: : 00: 1a: 04: 00: 00: 14: 07: 44: 43: 4f: 4e: 2d: 57: 32: 00: 80: 00: 03: 00: 04: 4b: 33: 02: 07: 08: 20:08: : 00: 15: 04: 00: 00: 20: 04: 49: 52: 50: 43: 01: ba: 00: 00: 04: 4b: 34: 01: 00: 64: : 00: 15: 04: 00: 00: 00: 04: 42: 44: 4d: 53: 07: e4: 00: 1e: 00: 04: 4b: 35: 01: 03: 20:

Мне нужно обработать полные потоки, но не знаю, как обращаться с неопределенной длиной каждого блока.

ответ

1

Вы можете попробовать что-то вроде:

var bytes = "00:15:04:00:00:81:00:01:81:51:81".split(":"); 
var buffer = new Buffer(bytes); 

function getNextBlock(buffer, pos) { 
    if (pos >= buffer.length) 
     return false; 

    var block = []; 
    while (pos < buffer.length && buffer[pos] != "81") 
     block.push(buffer[pos++]); 

    return block.length ? block : false; 

} 

var block; 
var pos = 0; 
while(block = getNextBlock(buffer, pos)) { 
    console.log(block); 
    pos += 1 + block.length; 
} 
+0

Привет Christophetd, Большое спасибо. Ваше решение отлично работает !!! – usurachai

+1

Рад, что делает. Подумайте о том, чтобы пометить мой ответ как решение вашей проблемы, если оно есть! ;) – christophetd

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