如何在Javascript中编程hex2bin?

Mar*_*cka 24 javascript hex binary-data

我需要在Javascript和PHP之间进行通信(我使用jquery for ajax)但PHP脚本的输出可能包含二进制数据.这就是我bin2hex在PHP中使用函数的原因.然后json_encode应用于PHP端.我不知道的是如何在Javascript端将十六进制字符串转换为二进制数据.

谢谢!

tob*_*spr 59

回答你的问题:

function Hex2Bin(n){if(!checkHex(n))return 0;return parseInt(n,16).toString(2)}
Run Code Online (Sandbox Code Playgroud)

以下是您可能会发现有助于处理二进制数据的其他一些函数:

//Useful Functions
function checkBin(n){return/^[01]{1,64}$/.test(n)}
function checkDec(n){return/^[0-9]{1,64}$/.test(n)}
function checkHex(n){return/^[0-9A-Fa-f]{1,64}$/.test(n)}
function pad(s,z){s=""+s;return s.length<z?pad("0"+s,z):s}
function unpad(s){s=""+s;return s.replace(/^0+/,'')}

//Decimal operations
function Dec2Bin(n){if(!checkDec(n)||n<0)return 0;return n.toString(2)}
function Dec2Hex(n){if(!checkDec(n)||n<0)return 0;return n.toString(16)}

//Binary Operations
function Bin2Dec(n){if(!checkBin(n))return 0;return parseInt(n,2).toString(10)}
function Bin2Hex(n){if(!checkBin(n))return 0;return parseInt(n,2).toString(16)}

//Hexadecimal Operations
function Hex2Bin(n){if(!checkHex(n))return 0;return parseInt(n,16).toString(2)}
function Hex2Dec(n){if(!checkHex(n))return 0;return parseInt(n,16).toString(10)}
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不适用于实际的二进制数据,而是使用二进制数据的 ASCII 表示。 (2认同)
  • 你的功能错了.至少`Hex2Bin`和`Bin2Hex`.在那两个人得到错误的结果后,甚至没有尝试过其他的.试试自己`Hex2Bin` =>`Bin2Hex` (2认同)

And*_*ris 16

JavaScript不支持二进制数据.不过你可以用常规字符串来模拟它.

var hex = "375771", // ASCII HEX: 37="7", 57="W", 71="q"
    bytes = [],
    str;

for(var i=0; i< hex.length-1; i+=2){
    bytes.push(parseInt(hex.substr(i, 2), 16));
}

str = String.fromCharCode.apply(String, bytes);

alert(str); // 7Wq
Run Code Online (Sandbox Code Playgroud)


小智 9

function hex2bin(hex)
{
    var bytes = [], str;

    for(var i=0; i< hex.length-1; i+=2)
        bytes.push(parseInt(hex.substr(i, 2), 16));

    return String.fromCharCode.apply(String, bytes);    
}
Run Code Online (Sandbox Code Playgroud)

感谢Andris!


有关此主题的其他有用信息(dex2bin,bin2dec)可在此处找到.据此,这是一个bin2hex解决方案:

parseInt(1100,2).toString(16); //--> c
Run Code Online (Sandbox Code Playgroud)


Mic*_*ton 5

虽然不是实际问题的答案,但在这种情况下也可能知道如何扭转过程:

function bin2hex (bin)
{

  var i = 0, l = bin.length, chr, hex = ''

  for (i; i < l; ++i)
  {

    chr = bin.charCodeAt(i).toString(16)

    hex += chr.length < 2 ? '0' + chr : chr

  }

  return hex

}
Run Code Online (Sandbox Code Playgroud)

例如,使用hex2binon b637eb9146e84cb79f6d981ac9463de1返回¶7ëFèL·mÉF=á,然后传递给它bin2hex返回b637eb9146e84cb79f6d981ac9463de1.

将这些函数原型化到String对象可能也很有用:

String.prototype.hex2bin = function ()
{

  var i = 0, l = this.length - 1, bytes = []

  for (i; i < l; i += 2)
  {
    bytes.push(parseInt(this.substr(i, 2), 16))
  }

  return String.fromCharCode.apply(String, bytes)   

}

String.prototype.bin2hex = function ()
{

  var i = 0, l = this.length, chr, hex = ''

  for (i; i < l; ++i)
  {

    chr = this.charCodeAt(i).toString(16)

    hex += chr.length < 2 ? '0' + chr : chr

  }

  return hex

}

alert('b637eb9146e84cb79f6d981ac9463de1'.hex2bin().bin2hex())
Run Code Online (Sandbox Code Playgroud)