如何在JavaScript中将文本转换为二进制代码? 文本到二进制代码
我希望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
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
这是一把小提琴:
这是一个非常通用的本地实现 来源于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;i n=(nvar 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
a9
类似于函数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)}, "")