【问题标题】:How to convert a Buffer to an array of ints node.js如何将缓冲区转换为整数数组 node.js
【发布时间】:2018-01-15 15:35:34
【问题描述】:

我有一个 c# 应用程序,它将一个双精度数组转换为一个字节数组数据到一个 node.js 服务器,该服务器被转换为一个缓冲区(按照惯例似乎推荐)。我想将此缓冲区转换为最初存储在双数组中的数字数组,我查看了其他问题,但它们要么不适用,要么不起作用([...buf],Array .prototype.slice.call(buf, 0) 等)。

基本上我有一个包含数据的 var buf,我希望这是一个整数数组,有什么办法可以做到这一点吗?

谢谢。

【问题讨论】:

  • 看看 parseInt() in javascript - w3schools.com/jsref/jsref_parseint.asp
  • @RishikeshDhokare 我可以直接将它应用到缓冲区吗??
  • 您不能直接访问缓冲区。您需要在其上使用“视图”,通常是TypedArray
  • 由于 nodejs 的 Buffer 已经是 Uint8Array,您可以像使用普通数组一样使用它来获取整数
  • @JonasW。好的,所以我可以遍历它并将其中的整数解析为一个新数组?

标签: javascript arrays node.js buffer


【解决方案1】:

首先,您需要知道数组中有哪些数字。我假设它们是 32 位整数。所以首先,在缓冲区周围创建封装类型数组:

 // @type {ArrayBuffer}
 var myBuffer = // get the bufffer from C#
 // Interprets byte array as 32 bit int array
 var myTypedArray = new Int32Array(myBuffer);
 // And if you really want standard JS array:
 var normalArray = [];
 // Push all numbers from buffer to Array
 normalArray.push.apply(normalArray, myTypedArray);

请注意,如果 C# 的数组采用 Big Endian,事情可能会变得更加复杂,但我认为不是。按照this answer的说法,你应该没事的。

【讨论】:

  • Int32Array 似乎对我不起作用,你知道我怎样才能找到它们的类型吗?谢谢
  • 你能看看 C# 应用程序源代码吗?或者您可以使用试用结束错误 - 在 MDN 上您可以找到类型化数组类的列表,只需尝试每一个。
  • 我已经尝试了每一种数据类型,我期待 1、2、3、4、5 但是我得到 0,0,0,0,0,0,240,63,0,0 ,0,0,0,0,0,64,0,0,0,0,0,0,8,64,0,0,0,0,0,0,16,64,0,0,0 ,0,0,0,20,64 为每个数据类型(除了 Int8Array,它将 240 替换为 -16)当我将数组打印到字符串时,有什么想法吗?
  • 你能给我提供二进制形式的数组吗?还是作为字节列表?或者也许使用 C# 应用程序的代码?不知道数据格式我帮不了你。
  • C#: double[] post = new double[] {1, 2, 3, 4, 5} 是数组的形成方式,然后用 byte[] 转换为 byte[] 数组postArray = new byte[post.Length * 8] 然后 Buffer.BlockCopy(post, 0, postArray, 0, postArray.Length),然后通过 webclient 发送到 node.js 服务器
【解决方案2】:

我设法用 DataView 做到这一点,并用它来迭代缓冲区,我以前尝试过,但由于某种原因没有用,但现在可以了。

【讨论】:

    猜你喜欢
    • 2017-07-26
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2011-12-03
    相关资源
    最近更新 更多