将二进制字符串转换为十六进制值

convert binary string to hex value

我正在使用 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 读对了。如何解决这个问题? 谢谢

您正在向 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 in二进制))。当您将此值写入缓冲区时,您实际上只想写入整数值,而不是字符串 "a8".

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

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


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