【问题标题】:convert binary string to hex value将二进制字符串转换为十六进制值
【发布时间】:2021-10-30 01:29:55
【问题描述】:

我正在使用 Node JS 和 Express.js 开发我的 Web 服务器。我需要从二进制字符串开始在缓冲区中插入十六进制值。我的代码是这样的:

var buffer = fs.readFileSync("myBINfile.dat");   
setValue(buffer, 4);


function setValue(buffer, i) {

  var value1 = parseInt(buffer[i].toString(16), 16).toString(2).toString()
  value1 = "0" + value1.substring(1, value1.length);

  var hex = parseInt(value1, 2).toString(16); 

  console.log(hex); // print a8 (correct)

  buffer[i] = hex;

  console.log(buffer[i]); // print 0 (why?)

}


缓冲区包含一个十六进制文件。 value1 被正确读取。如何解决这个问题? 谢谢

【问题讨论】:

  • “Hex Buffer 和i 是预先定义的,它们是有效的。” - 你能证明吗?因为否则,这段代码很好,并且测试它按预期工作。
  • 我更新了帖子。感谢您的帮助
  • 您确定这是您的最新代码吗? (注意你的评论说// print a8 (correct),但是这个不能a8打印为value1 = "0" + value1.substring(1, value1.length);前缀任何值都会带有0)
  • 我更新错了。这似乎是一个简单的操作,但有些东西不起作用

标签: node.js express binary hex buffer


【解决方案1】:

您正在将字符串值写入Buffer 对象,而不是它期望的数值。换行:

var hex = parseInt(value1, 2).toString(16); 

与:

var hex = parseInt(value1, 2); 

"a8" 实际上只是整数值 168(如果您在 var hex = parseInt(value1, 2).toString(16); 行之前找到 console.log(value1),您将得到 10101000(二进制为 168))。当您将此值写入缓冲区时,您实际上只想写入整数值,而不是字符串"a8"

您所说的“十六进制值”实际上只是一个数字,十六进制只是一种表示格式。您不存储“十六进制数字”或“二进制数字”,您只需存储数字本身。

这样做的结果是,您会发现 console.log(hex); 输出 168 并认为“虽然这是错误的!”,但事实并非如此,因为 168 a8。


您会发现它适用于某些值但不适用于其他值的原因是因为任何导致纯数字十六进制值(例如"22""67")的值都将自动转换为它们的等效数字(@ 987654332@ 或 67)。但是,在您的情况下,"a8" 该值无法转换为缓冲区所需的数字类型,因此被丢弃并写入0

【讨论】:

    猜你喜欢
    • 2018-01-22
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2017-05-26
    • 2013-11-24
    相关资源
    最近更新 更多