How do I implement hex2bin()?

后端 未结 8 1740
野趣味
野趣味 2020-11-29 02:40

I need to communicate between Javascript and PHP (I use jQuery for AJAX), but the output of the PHP script may contain binary data. That\'s why I use bin2hex()

相关标签:
8条回答
  • 2020-11-29 03:45

    To answer your question:

    function Hex2Bin(n){if(!checkHex(n))return 0;return parseInt(n,16).toString(2)}
    

    Here are some further functions you may find useful for working with binary data:

    //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)}
    
    0 讨论(0)
  • 2020-11-29 03:46

    Although not an answer to the actual question, it is perhaps useful in this case to also know how to reverse the process:

    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
    
    }
    

    As an example, using hex2bin on b637eb9146e84cb79f6d981ac9463de1 returns ¶7ëFèL·mÉF=á, and then passing this to bin2hex returns b637eb9146e84cb79f6d981ac9463de1.

    It might also be useful to prototype these functions to the String object:

    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())
    
    0 讨论(0)
提交回复
热议问题