【问题标题】:NodeJS, how do I input an integer as hex to a bufferNodeJS,如何将整数作为十六进制输入到缓冲区
【发布时间】:2019-04-20 00:56:52
【问题描述】:

我正在寻求将现有的 HEX 文件打开到缓冲区中并对其内容进行更改, 我正在创建缓冲区

const fs = require('fs');
var fileData = fs.readFileSync('./server/recipeTemplate/GemTwin.REL');

我知道如果我想将 ascii 字符作为十六进制输入,我可以使用这样的字符代码:

var recipeName = req.body.name
var recipeIndex = 2343;
for (var i = 0; i < recipeName.length; i++) {
    fileData[recipeIndex+i] = recipeName.charCodeAt(i);
}

问题是我如何处理整数,

我尝试了以下失败

fileData[2365] = (12).toString(16);

即使 (12).toString(16) 的计算结果为 C,结果仍为 0

如何将整数转换为缓冲区可接受的值?

【问题讨论】:

  • 一个 int 是一个可接受的缓冲区值。 fileData[2365] = 12 不行吗?
  • 我需要它作为十六进制,所以 0C,12 会将 12 放入缓冲区位置
  • 不,你不需要它作为十六进制。 JS 不区分小数和十六进制。它们存储为数字。 0x... 只是写数字的另一种方式。

标签: node.js buffer fs


【解决方案1】:

正如the documentation 解释的那样,缓冲区值是无符号的 8 位整数,即 0 到 255 之间的数字。

应该是:

fileData[2365] = 12

我知道如果我想将 ascii 字符作为十六进制输入,我可以使用这样的字符代码

JavaScript 中没有十六进制的特殊数据类型,charCodeAt 返回一个整数。问题中的代码已经做了和上面一样的事情。

【讨论】:

    【解决方案2】:

    通过将索引设置为 0x[hexadecimal] 来实现所需的结果

    【讨论】:

      猜你喜欢
      • 2016-04-30
      • 2012-02-20
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 2021-05-17
      • 2014-11-21
      相关资源
      最近更新 更多