如何在JavaScript中将文本转换为二进制代码? 文本到二进制代码

如何在JavaScript中将文本转换为二进制代码? 文本到二进制代码,javascript,string,binary,Javascript,String,Binary,我希望JavaScript将文本区域中的文本转换为二进制代码。 例如,如果用户在文本区域中键入“TEST”,则应返回值“01010100 01000101 01010011 01010100” 我希望避免使用switch语句为每个字符分配二进制代码值(例如case“T”:return“01010100)或任何其他类似技术 这里有一个例子来说明我的意思。这在本机JavaScript中可能吗?只是一个正确方向的提示 var foo = "TEST", res = [ ]; foo.spli

我希望JavaScript将文本区域中的文本转换为二进制代码。

例如,如果用户在文本区域中键入“
TEST
”,则应返回值“
01010100 01000101 01010011 01010100

我希望避免使用switch语句为每个字符分配二进制代码值(例如
case“T”:return“01010100
)或任何其他类似技术


这里有一个例子来说明我的意思。这在本机JavaScript中可能吗?

只是一个正确方向的提示

var foo = "TEST",
    res = [ ];

foo.split('').forEach(function( letter ) {
    var bin     = letter.charCodeAt( 0 ).toString( 2 ),
        padding = 8 - bin.length;

    res.push( new Array( padding+1 ).join( '0' ) + bin );
});

console.log( res );
var PADDING=“00000000”
var string=“测试”
var resultArray=[]
对于(变量i=0;i
您应该做的是使用
charCodeAt
函数将每个字符转换为十进制Ascii码。然后您可以使用
toString(2)
将其转换为二进制值:

HTML:


转换
JS:

函数转换(){
var输出=document.getElementById(“ti2”);
var输入=document.getElementById(“ti1”).value;
产值=”;
对于(变量i=0;i
这是一把小提琴:

  • 穿过绳子
  • 将每个字符转换为字符代码
  • 将字符代码转换为二进制
  • 将其推入数组并添加左侧0
  • 返回一个由空格分隔的字符串
  • 代码:


    这是一个非常通用的本地实现

    来源于Github(gist):


    希望它能帮上忙。你想用什么就用什么(好吧,至少是麻省理工学院允许的任何东西)。

    这可能是你能得到的最简单的方法:

    function text2Binary(string) {
        return string.split('').map(function (char) {
            return char.charCodeAt(0).toString(2);
        }).join(' ');
    }
    

    前导为0的8位字符

    'sometext'
            .split('')
            .map((char) => '00'.concat(char.charCodeAt(0).toString(2)).slice(-8))
            .join(' ');
    

    如果您需要6位或7位,只需更改
    .slice(-8)

    其他答案将适用于大多数情况。但值得注意的是
    charCodeAt()
    和相关内容不适用于UTF-8字符串(即,如果有任何字符超出标准ASCII范围,它们将抛出错误)。这里有一个解决方法

    // UTF-8 to binary
    var utf8ToBin = function( s ){
        s = unescape( encodeURIComponent( s ) );
        var chr, i = 0, l = s.length, out = '';
        for( ; i < l; i ++ ){
            chr = s.charCodeAt( i ).toString( 2 );
            while( chr.length % 8 != 0 ){ chr = '0' + chr; }
            out += chr;
        }
        return out;
    };
    
    // Binary to UTF-8
    var binToUtf8 = function( s ){
        var i = 0, l = s.length, chr, out = '';
        for( ; i < l; i += 8 ){
            chr = parseInt( s.substr( i, 8 ), 2 ).toString( 16 );
            out += '%' + ( ( chr.length % 2 == 0 ) ? chr : '0' + chr );
        }
        return decodeURIComponent( out );
    };
    
    //UTF-8到二进制
    var utf8ToBin=函数{
    s=unescape(一个或多个组件);
    变量chr,i=0,l=s.length,out='';
    对于(;i

    escape/unescape()
    函数已被弃用。如果您需要多填充,可以查看此处更全面的UTF-8编码示例:

    这似乎是简化版

    Array.from('abc').map((each)=>each.charCodeAt(0).toString(2)).join(" ")
    

    谢谢你马吉德·莱西的邀请

    我根据您的代码生成了两个函数:

    目标是实现字符串到VARBINARY、BINARY和back的转换

    const stringToBinary = function(string, maxBytes) {
      //for BINARY maxBytes = 255
      //for VARBINARY maxBytes = 65535
      let binaryOutput = '';
      if (string.length > maxBytes) {
        string = string.substring(0, maxBytes);
      }
    
      for (var i = 0; i < string.length; i++) {
        binaryOutput += string[i].charCodeAt(0).toString(2) + ' ';
      }
    
      return binaryOutput;
    };
    
    const stringToBinary=函数(字符串,最大字节){
    //对于二进制maxBytes=255
    //对于VARBINARY maxBytes=65535
    让binaryOutput='';
    如果(string.length>maxBytes){
    string=string.substring(0,最大字节);
    }
    对于(变量i=0;i
    和向后转换:

    const binaryToString = function(binary) {
      const arrayOfBytes = binary.split(' ');
    
      let stringOutput = '';
    
      for (let i = 0; i < arrayOfBytes.length; i++) {
        stringOutput += String.fromCharCode(parseInt(arrayOfBytes[i], 2));
      }
    
      return stringOutput;
    };
    
    const binaryToString=函数(二进制){
    常量arrayOfBytes=二进制.split(“”);
    让stringOutput='';
    for(设i=0;i
    下面是一个有效的例子:

    试试这个:

    String.prototype.toBinaryString = function(spaces = 0) {
        return this.split("").map(function(character) {
            return character.charCodeAt(0).toString(2);
        }).join(" ".repeat(spaces));
    }
    
    然后像这样使用它:

    "test string".toBinaryString(1); // with spaces
    "test string".toBinaryString(); // without spaces
    "test string".toBinaryString(2); // with 2 spaces
    

    如果您在节点或支持
    BigInt
    的浏览器中工作,此版本通过节省昂贵的字符串结构来降低成本:

    const zero=0n
    常数移位=8n
    二元函数(str){
    常量len=str.length
    设n=0
    for(设i=0;in=(n
    var UTF8ToBin=function(f){for(var a,c=0,d=(f=unescape(encodeURIComponent(f)))。长度,b=“”;c这是您所能得到的最短的。它基于最高评级的答案,但转换为reduce函数

    "TEST".split("").reduce(function (a, b) { return a + b.charCodeAt(0).toString(2)}, "")
    

    这是通过谷歌找到的。我想这就是你要找的。你在JSF中有字符串的charCodeAt方法。人们应该知道字符串在JavaScript中存储为UTF-16。因此,你将有UTF-16二进制表示。如果你想要其他东西,比如UTF-8,你必须在编码到之前手动将charcode转换为UTF-8二进制(例如)。左pad的另一种方式:
    vara='a'。charCodeAt(0)。toString(2);/*a==“1100001”*/a=新数组(9-a.length)。join('0')+a;/*a==“0110001“*/
    。问题:是否有其他方法可以做到这一点,比如用此文本创建一个blob,然后使用filereader将其作为二进制数据输出……然而,它似乎只是为我输出文本。未来读者注意:请注意,字符集不限于8位。请尝试
    charToBin(“为什么不”输入。charCodeAt(i)“相反?这在前导零上有问题。
    output.value+=(0b100000000+input[i]。charCodeAt(0)).toString(2)。substring(1)+”“;
    修复了它。您可以在
    9-bin.length+1
    中省略
    +1,方法是将
    8
    a
    9
    类似于
    函数textToBin(text){var length=text.length,output=[];for(var i=0;i// UTF-8 to binary
    var utf8ToBin = function( s ){
        s = unescape( encodeURIComponent( s ) );
        var chr, i = 0, l = s.length, out = '';
        for( ; i < l; i ++ ){
            chr = s.charCodeAt( i ).toString( 2 );
            while( chr.length % 8 != 0 ){ chr = '0' + chr; }
            out += chr;
        }
        return out;
    };
    
    // Binary to UTF-8
    var binToUtf8 = function( s ){
        var i = 0, l = s.length, chr, out = '';
        for( ; i < l; i += 8 ){
            chr = parseInt( s.substr( i, 8 ), 2 ).toString( 16 );
            out += '%' + ( ( chr.length % 2 == 0 ) ? chr : '0' + chr );
        }
        return decodeURIComponent( out );
    };
    
    Array.from('abc').map((each)=>each.charCodeAt(0).toString(2)).join(" ")
    
    const stringToBinary = function(string, maxBytes) {
      //for BINARY maxBytes = 255
      //for VARBINARY maxBytes = 65535
      let binaryOutput = '';
      if (string.length > maxBytes) {
        string = string.substring(0, maxBytes);
      }
    
      for (var i = 0; i < string.length; i++) {
        binaryOutput += string[i].charCodeAt(0).toString(2) + ' ';
      }
    
      return binaryOutput;
    };
    
    const binaryToString = function(binary) {
      const arrayOfBytes = binary.split(' ');
    
      let stringOutput = '';
    
      for (let i = 0; i < arrayOfBytes.length; i++) {
        stringOutput += String.fromCharCode(parseInt(arrayOfBytes[i], 2));
      }
    
      return stringOutput;
    };
    
    String.prototype.toBinaryString = function(spaces = 0) {
        return this.split("").map(function(character) {
            return character.charCodeAt(0).toString(2);
        }).join(" ".repeat(spaces));
    }
    
    "test string".toBinaryString(1); // with spaces
    "test string".toBinaryString(); // without spaces
    "test string".toBinaryString(2); // with 2 spaces
    
    var UTF8ToBin=function(f){for(var a,c=0,d=(f=unescape(encodeURIComponent(f))).length,b="";c<d;c++){for(a=f.charCodeAt(c).toString(2);a.length%8!=0;){a="0"+a}b+=a}return b},binToUTF8=function(f){for(var a,c=0,d=f.length,b="";c<d;c+=8){b+="%"+((a=parseInt(f.substr(c,8),2).toString(16)).length%2==0?a:"0"+a)}return decodeURIComponent(b)};
    
    "TEST".split("").reduce(function (a, b) { return a + b.charCodeAt(0).toString(2)}, "")