Javascript 使用二进制解析器库访问已解析的输出缓冲区

Javascript 使用二进制解析器库访问已解析的输出缓冲区,javascript,node.js,parsing,binary,decode,Javascript,Node.js,Parsing,Binary,Decode,Node的二进制解析器库是否允许您访问从输入缓冲区解析的变量?快速启动指令状态“解析结果将作为对象返回。” 我看不到引用createapi方法中概述的构造函数的机制 “创建(构造函数函数) 设置应调用的构造函数,以创建从解析方法返回的对象。“ 如何访问已解析的数据?对于GitHub示例tcp.js,示例tcp.js中的值(如下所示): 使用parse(buf)的二进制解析器输出 如果我想访问dstPort 993值,该怎么办?二进制解析器允许我在Node.js中这样做吗 换句话说,如何使用解析

Node的二进制解析器库是否允许您访问从输入缓冲区解析的变量?快速启动指令状态“解析结果将作为对象返回。

我看不到引用createapi方法中概述的构造函数的机制

“创建(构造函数函数) 设置应调用的构造函数,以创建从解析方法返回的对象。“

如何访问已解析的数据?对于GitHub示例tcp.js,示例tcp.js中的值(如下所示):

使用parse(buf)的二进制解析器输出

如果我想访问dstPort 993值,该怎么办?二进制解析器允许我在Node.js中这样做吗


换句话说,如何使用解析操作中的值?在我目前对Node.js的有限知识中,我相信根据文档,我应该能够分别提取解析的值?我是否误解了二进制解析器将变量名称和类型分配给可在用户程序中使用的变量的能力?我的目标是访问这些变量,无论是在数组中还是在我的程序的后面部分的其他数据结构中。

我不确定您的JS技能水平,但您可以尝试
var dstPort=tcpHeader.parse(buf).dstPort;console.log(dstPort)
并查看是否显示993。该输出看起来像一个JavaScript对象——我不知道为什么它周围有星号。parse函数以您设置它的方式为您提供了一个基本的JavaScript对象,而不是二进制解析器特有的任何东西。

谢谢Lucas,这让我大吃一惊!技能水平上的平均堆叠第3天。。。我的印象是(可能是错误的)var定义是在解析器数据结构中完成的,而事实上,这些只是标签(?),例如,uint16('srcPort')实际上没有执行var dstPort=993;在幕后。那么我现在是否需要为缓冲区中的每个项创建一个var赋值?e、 g.var UrgentPointer=tcpHeader.parse(buf).UrgentPointer等等?太棒了!有很多方法可以使用对象,只需查看工具箱中与对象相关的函数。天哪!感谢链接-基本工具!
var Parser = require('../lib/binary_parser').Parser;

var tcpHeader = new Parser()
    .endianess('big')
    .uint16('srcPort')
    .uint16('dstPort')
    .uint32('seq')
    .uint32('ack')
    .bit4('dataOffset')
    .bit6('reserved')
    .nest('flags', {
        type: new Parser()
            .bit1('urg')
            .bit1('ack')
            .bit1('psh')
            .bit1('rst')
            .bit1('syn')
            .bit1('fin')
    })
    .uint16('windowSize')
    .uint16('checksum')
    .uint16('urgentPointer');

var buf = new Buffer('e8a203e108e177e13d20756b801829d3004100000101080a2ea486ba793310bc', 'hex');

console.log(tcpHeader.parse(buf));
*{ srcPort: 59554,
  dstPort: 993,
  seq: 148994017,
  ack: 1025537387,
  flags: { urg: 0, ack: 1, psh: 1, rst: 0, syn: 0, fin: 0 },
  dataOffset: 8,
  reserved: 0,
  windowSize: 10707,
  checksum: 65,
  urgentPointer: 0 }*