问题标签 [bindata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
551 浏览

mongodb - 使用 Scala 从 MongoDB 解码 Bindata

我们正在尝试解码保存在 MongoDB 数据库中的 BinData。这是一个伪造的 MAC 地址 (11:22:33:44:55:66),在 MongoDB 中保存为 BinData (BinData(0,ESIzRFVm)),我们不知道如何取回它。我们尝试过 Base64 解码、HEX 解码和其他几种方式。

这与其说是一个编程问题,不如说是一个一般的解码问题......我们只是不确定 BinData 是如何编码的以及什么编码。那么... MongoDB Bindata 如何解码?

0 投票
1 回答
132 浏览

mongodb - 使用 mongorestore 重放带有 binData 字段的 oplog 时出错

当使用带有选项--oplogReplay 的mongorestore 来重放oplogs 时,我发现了一个奇怪的错误,即mongorestore 无法处理binData 字段的设置操作。如果你这样做,你可能会遇到同样的错误:

  1. 插入测试数据。

    /li>
  2. 更新其 binData 字段。

    /li>
  3. 更新其其他字段

    /li>
  4. 用 oplog 检查

    您可能会看到以下响应:

    /li>
  5. 转储这两个 oplog 并重放它

    在 bash 外壳中:

    在此之后,您会发现数据不符合预期。就我自己而言,数据会更改为此。

    大小字段确实正确,但数据字段不正确。

  6. 奇怪的是,如果你只转储一个 oplog 并重放它,数据会是正确的。

    oplog 重播后,'data' 字段是完全正确的。

    为什么会发生这种奇怪的事情?

0 投票
0 回答
191 浏览

ruby - 如何使用 BinData?

我正在尝试解析二进制文件,但我不太清楚如何正确使用BinData

二进制文件的设置方式如下:

  1. 前 4 个字节 (UINT32) 表示属性名称的长度。
  2. 接下来的 8 * 长度表示属性名称(作为字符串)。
  3. 接下来的 4 个字节 (UINT32) 表示属性类型的长度。
  4. 接下来的 8 * 长度表示属性类型(作为字符串)。
  5. 接下来的 8 个字节(UINT64)代表数据的长度。
  6. 在此之后,数据可以是任意数量的字节(取决于它是什么类型的数据,可以是 int (4)、string (4 * len)、float (4) 或数组)。

在此之后,该过程对下一个属性重复。

我想我的问题是:

  1. 当我调用 MyBinDataClass.read() 时,如何将正确的部分提供给它以读取而不是整个文件,并且由于我不知道每个属性的实际长度(它们因类型而异),我该如何正确划分它?

  2. 如何让单个 BinData 处理不同的属性类型?

0 投票
1 回答
572 浏览

ruby - 在 Ruby 中构建 BinData 记录

我不确定选择是否正是我在这里需要的,但我会解释我正在尝试做的事情。我有以下可以正常工作的 BinData 结构。

但是,在获得 :data_len 之后,我需要获取实际数据。我如何处理接下来的事情取决于 :type 字符串的值。

  1. 如果类型是“IntProperty”,那么接下来的四个字节 (int32) 是一个 int。
  2. 如果类型是“FloatProperty”,那么接下来的四个字节(float_32)是一个浮点数。
  3. 如果 type 是 "StringProperty" 那么接下来的四个字节 (int32) 是一个 int (len of string) 并且下一个 (len * 8) 是字符串本身。
  4. 如果类型是“ArrayProperty”,那么接下来的四个字节(int32)是一个 int(数组的 len),那么接下来的字节数是数组的许多属性对象的 len(存储在一个数组中)。

任何人都可以帮助我弄清楚如何导航这些路径并正确设置 BinData::Record 吗?

0 投票
1 回答
168 浏览

ruby - 使用 BinData 读取时跳过字节

所以我有这样的记录:

有没有办法让我在读取 :name_len 和 :name 后停止读取记录,只有当 :name 等于某个值时?或者,一旦您开始读取带有 Record 的文件,它就必须一直运行?

我知道我可以使用 :onlyif 跳过所有剩余的内容,但是有没有办法将 :onlyif 放在之后的所有内容上?您可以在选择上加上 :onlyif 吗?

我试过的代码:

我还尝试将 :name_len 和 :name 下面的所有内容放在它自己的记录中并这样做:

但这不起作用,因为如果我将 PropertyData Record 放在上面(它必须是因为 Property 需要知道 PropertyData 是什么)然后它会出错,因为 PropertyData 需要知道 Property 是什么(因为它用该类型填充数组)。他们没有办法知道彼此的存在,因为他们都互相使用。

0 投票
1 回答
82 浏览

ruby - 当文件无法再使用 BinData 读取时停止读取

目前我正在使用BinData gem来解析二进制文件格式。它工作得很好,除了我不知道在哪里停下来。该文件分为我使用 BinData Records 读取的属性。可以有 16 到 18 个属性(取决于它所采用的文件)。所以,如果我这样做:

当有 16 个属性时,它工作得很好,但是,如果我将它增加到 17 个,我会收到以下错误。

我的问题是,我怎样才能一起避免 16 次并让它读取,直到它读取它可以读取的所有属性,然后在它到达文件结尾错误时停止。

0 投票
2 回答
96 浏览

ruby - 重用具有不同数据的 BinData 记录

如果有多个采用以下形式的 BinData 记录,这里有几个示例:

所有这些本质上都是相同的,它们只是使用不同类型的对象创建一个数组。有没有办法只制作其中一个并以某种方式将我希望它读入数组的对象类型传递给它?

0 投票
1 回答
161 浏览

ruby-on-rails - 在 ruby​​ on rails 应用程序中需要 bindata

我有一组文件位于 Ruby on Rails 应用程序的 lib 目录中。

我有一个模型需要使用这些文件。在我的模型中,我有以下内容:

(旁注;我很想知道一种要求所有文件的方法,而不是每个文件的 require_relative )。

我 require_relative 的文件中包含以下要求。

当我尝试从 require_relative 文件访问函数时,出现以下错误:

这也发生在文件集中需要的其他 gem 上。我只是选择了bindata一个例子。

bindata的 Gemfile 中有。当我运行bundle show bindata时,它向我显示了bindata.

我什至放入require 'bindata'了我的模型,但它给了我同样的加载错误。

我该如何停止LoadError

任何帮助将不胜感激。

更新 1

当我跑步时bundle show。我得到以下信息:

然后在控制台中,要求 bcrypt 有效,但 bindata 无效。

但 bindata 没有。

更新 2

好的,所以我知道这与我加载 Rails 环境的方式有关。

更新 3

所以我返回了一些 git 提交并继续尝试添加 gem 并查看它们是否会加载到我的 rails 控制台中。如果确实如此,我就已经足够远了。不知道有什么不同。但是,我也注意到当我的 spring 服务器重新启动时,我的 gem 会加载到我的 rails 控制台中。

0 投票
1 回答
53 浏览

ruby - 在 BinData 中实现基本数据类型

我正在尝试为半精度浮点类型实现binary16 编码。

除了一个细节之外,该代码正在工作:它返回一个具有三个属性(符号、指数、分数)的对象,但我希望它返回浮点数。现在,我必须打电话to_f才能到达花车。我希望它能够像集成的 int 和 float 类一样工作。

这是我的代码:

我想要什么:

现在发生了什么:

0 投票
0 回答
149 浏览

ruby-on-rails - Rails 编码控制字符并通过套接字发送

使用Eventmachine,我已经能够构建一个简单的客户端/服务器程序,成功地通过套接字发送数据。但是服务器期望数据是一种特定的格式。

为了与服务器通信,第一步是发送 WAKEUP 调用并获得确认。服务器在唤醒呼叫中需要一个 3 字节的 ID。文档中提供了一个示例,显示了发送 ID 和接收 ack 的成功场景。

客户端应发送的数据格式如下:

<> 括号内是不可打印的 ASCII 字符(<sy>= ASCII 22 或 Hex 0x16)

以下是人物的一些细节:

<sy>= ASCII: 22,十六进制: 0x16,字符: ^V

<eq>= ASCII: 5,十六进制: 0x05,字符: ^E

<et>= ASCII: 4,十六进制: 0x04,字符: ^D

我正在使用 gem Bindata来表示<sy><sy><eq>111<et>但不确切知道要使用哪种类型。你能提供一种方法来实现这一点吗?