【问题标题】:pack for javascript and return a binary string为 javascript 打包并返回一个二进制字符串
【发布时间】:2011-06-22 12:59:06
【问题描述】:

我之前做过功课,所以我知道其他问题,例如pack / unpack functions for node.js

关键是,这些包返回除二进制字符串之外的所有内容。我想做的很简单:

ruby-1.9.2-p136 :001 > [1,"10.0.0.1","foo"].pack 'l! a4 Z*'
 => "\x01\x00\x00\x00\x00\x00\x00\x0010.0foo\x00" 

【问题讨论】:

  • 你能解释一下你的例子的意图吗?非常具体且不清楚为什么要这样做 - 您将数字 1 打包为带符号的本地字节序长,字符串“10.0.0.1”的四个字节,字符串“foo”以 null 结尾。还是您只是在寻找像 Ruby 中的通用“打包/解包”库?
  • a 生成将映射到 C 结构的二进制字符串。 ruby 代码有效,我可以通过 svipc 在我的 ruby​​(perl、python 以及)代码和我的 C 代码之间交换信息。但是使用javascript,它不起作用。

标签: javascript node.js


【解决方案1】:

在 node.js v0.5.0-pre Buffers 中有各种“写入”方法,包括显式签名和字节序。

因此您的示例将从 Ruby 音译为 node.js JavaScript,例如:

var b = new Buffer(8/*long*/ + 4 + 4);
b.writeInt32(1/*value*/, 0/*offset*/, 'little'/*endian*/);
b.write('10.0', 8/*offset*/);
b.write('foo\0', 12/*offset*/);
b.toString();
// => '\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u000010.0foo\u0000'

[编辑]:直接在 GitHub 存储库中更新了指向 Buffers documentation 的链接。

【讨论】:

  • 请推荐使用 0.4.8 而不是 0.5.0-pre。
  • @Raynos 但 0.4.8 不支持它
  • @VP 不是吗?你检查了吗?
  • @Raynos:0.4.8 Buffer docs 没有提到这些方法,所以即使它们存在于那个版本中,我也怀疑它们是否得到“官方支持”,无论这意味着什么;)
  • 但我无法在我的 c 端转换字符串。
【解决方案2】:

使用 JS,使用 myVar.toString(2),其中 2 是基数。这将返回 1 和 0 中的二进制值。

【讨论】:

  • 你能提供一个 JS 中的例子,就像我在 ruby​​ 中的例子一样吗?
  • @VP 您的问题与 Ruby 无关。你的标题说JS。问题上甚至没有 Ruby 标签。
  • 随意改进问题,添加必要的标签。你有足够的声誉;)
猜你喜欢
  • 2019-02-02
  • 2023-03-02
  • 2013-01-17
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多