Я думаю, что ответ в том, что ваш Buffer
не представляет объект, который вы думаете, что он делает:
> var raw = '01 02 03'
> buff = new Buffer(raw, 'utf8')
<Buffer 30 31 20 30 32 20 30 33>
> buff.slice(0,0)
<Buffer >
> buff.slice(0,1)
<Buffer 30>
> buff.slice(0,2)
<Buffer 30 31>
> buff.slice(0,3)
<Buffer 30 31 20>
> buff.slice(0,0).toString()
''
> buff.slice(0,1).toString()
'0'
> buff.slice(0,2).toString()
'01'
> buff.slice(0,3).toString()
'01 '
> buff.slice(0,4).toString()
'01 0'
> buff.slice(0,5).toString()
'01 02'
> buff.slice(0,6).toString()
'01 02 '
> buff.slice(0,7).toString()
'01 02 0'
> buff.slice(0,8).toString()
'01 02 03'
> buff.length
8
Вместо представления буфера длиной три байта он представляет буфер длиной 8 байтов. Врезаясь в него, вы получаете отдельные шестнадцатеричные значения символов. (Обратите внимание, что пробел равен 20
- точно так же, как %20
, столь распространенный в URL-адресах.)
Но я чувствую, что ваша var = '01 1d 00...'
- это просто попытка заполнить буфер некоторыми двоичными данными, а не то, что на самом деле происходит в вашей программе - может быть проще работать с упрощенной версией того, как вы на самом деле заполнение буфера. Может быть, прочитать его из файла?