Javascript 如何使text=整数

Javascript 如何使text=整数,javascript,Javascript,我有一个问题,我已经努力解决了好几天了。 我想知道是否有可能让一个文本变成一个整数。 所以每次我在文本区域(“ALC”)加载中写入,然后在文本区域(“MLC”)001上写入。最后还包括1-15到二进制 例如,负载#1将显示001 0 00001 <html> <head> <center><font size ="24"> Simple Assembler </font></center> <script type="

我有一个问题,我已经努力解决了好几天了。 我想知道是否有可能让一个文本变成一个整数。 所以每次我在文本区域(“ALC”)加载中写入,然后在文本区域(“MLC”)001上写入。最后还包括1-15到二进制 例如,负载#1将显示001 0 00001

<html>
<head>
<center><font size ="24"> Simple Assembler </font></center>
<script type="text/javascript">
    var Load = "001";
    var Store = "010";
    var Add = "011";
    var Sub = "100";
    var Equal = "101";
    var Jump = "110";
    var Halt = "111";
    var # = "1";


</script>
</head>
<body>

<form name="AssemblyLanguagecode" action="" method="">
<textarea Id="ALC" style="resize:none;width:35%;height:35%;margin-left:15%" value="">Insert Assembly Language Code</textarea>
<textarea Id="MLC" style="resize:none;width:35%;height:35%;" ReadOnly="True">Machine Language Code will be displayed here</textarea><br  />
<p align="center"><input type="button" value="Assemble" onclick="ALCtoMLC()";" /></p>
</form>


<script type= "text/javascript">

function ALCtoMLC() {   
    var x = document.getElementById("ALC").value;
    x = parseInt(x);
    var bin = x.toString(2);



document.getElementById("MLC").innerHTML = bin;
}

</script>

</body>
</html>

简单汇编程序
var Load=“001”;
var Store=“010”;
var Add=“011”;
var Sub=“100”;
var Equal=“101”;
var Jump=“110”;
var Halt=“111”;
变量#=“1”;
插入汇编语言代码
机器语言代码将显示在此处

我想我明白你想做什么。您希望使用您在“ALC”中键入的内容作为值的键。在这种情况下,您希望使用javascript对象并将指令分配为键,将二进制文件分配给值。比如

var instruction_set = {
    "Load" : "001",
    "Store" : "010",
    "Add" : "011",
    "Sub" : "100",
    "Equal" : "101",
    "Jump" : "110",
    "Halt" : "111"
}

function ALCtoMLC() {
    var x = document.getElementById("ALC").value;
    x = instruction_set[x];
}
更新:

试试这个:

<html>
<head>
<center><font size ="24"> Simple Assembler </font></center>
<script type="text/javascript">
    var Load = "001";
    var Store = "010";
    var Add = "011";
    var Sub = "100";
    var Equal = "101";
    var Jump = "110";
    var Halt = "111";
    var # = "1";



</script>
</head>
<body>

<form name="AssemblyLanguagecode" action="" method="">
<textarea Id="ALC" style="resize:none;width:35%;height:35%;margin-left:15%" value="">Insert Assembly Language Code</textarea>
<textarea Id="MLC" style="resize:none;width:35%;height:35%;" ReadOnly="True">Machine Language Code will be displayed here</textarea><br  />
<p align="center"><input type="button" value="Assemble" onclick="ALCtoMLC();" /></p>
</form>


<script type= "text/javascript">
var Dict = { 'Load':"001",'Store':"010"}; //example Instruction set

function ALCtoMLC() {   
    var x = document.getElementById("ALC").value;
    var instrType = '';
    for (var instr in Dict){
        var ind = x.indexOf(instr);
        if( ind > -1){
            instrType = instrType + Dict[instr];
            x = x.replace(instr,'');
        }
    }
    console.log(instrType, "::", x);
    x = parseInt(x);
    var bin = x.toString(2);
    bin = instrType + bin; 
    document.getElementById("MLC").innerHTML = bin;
}

</script>

</body>
</html>

简单汇编程序
var Load=“001”;
var Store=“010”;
var Add=“011”;
var Sub=“100”;
var Equal=“101”;
var Jump=“110”;
var Halt=“111”;
变量#=“1”;
插入汇编语言代码
机器语言代码将显示在此处

var Dict={'Load':“001”,'Store':“010”}//示例指令集 函数ALCtoMLC(){ var x=document.getElementById(“ALC”).value; var instrType=''; for(在Dict中的var instr){ var ind=x.indexOf(仪表); 如果(ind>-1){ instrType=instrType+Dict[instr]; x=x。更换(仪表,); } } log(instrType,:,,x); x=parseInt(x); var bin=x.toString(2); bin=instrType+bin; document.getElementById(“MLC”).innerHTML=bin; }
我会这样做:

var opcodes = {
    Load:  1,
    Store: 2,
    Add:   3,
    Sub:   4,
    Equal: 5,
    Jump:  6,
    Halt:  7
};

var assemblyTextarea = document.querySelector("#assembly");
var machineTextarea = document.querySelector("#machine");

document.querySelector("#assemble").addEventListener("click", function () {
    var instruction = assemblyTextarea.value.split(" ");
    var operand =+ instruction[1].slice(1);
    var opcode = instruction[0];

    var code = opcodes[opcode] * 16 + operand;
    var bits = ("0000000" + code.toString(2)).slice(-8);

    machineTextarea.value = bits;
}, false);
请参见此处的演示:


输入的格式应如下:
Load#15

假设您有一种获取令牌的方法。那么你的函数应该是这样的

var tokens = getTokens( document.getElementById("ALC").value ) ;
var vocabulary = { "Load" : "001" , " ... " } ;
var output = []
var i = 0;
var tokensLength = tokens.length;
for ( ; i < tokensLength; i++){
     var token = tokens[i];
     if ( isNaN(token) && typeof(vocabulary[token]) != "undefined" ){
           output.push( vocabulary[token] );

     }else if ( !isNaN(token) ){
          output.push( Number(token).toString(2) );
     }else{
          console.log(["error : unknown token ", token]);
     }
}

document.getElementById("MLC").value = output.join(" "); 
var-tokens=getTokens(document.getElementById(“ALC”).value);
变量词汇={“加载”:“001”,“…”};
变量输出=[]
var i=0;
var tokensLength=tokens.length;
对于(;i
我在问题中看到Load转换为0010而不是001,所以我只需修改词汇表

说明:

  • 我假设您有一种方法可以将输入拆分为令牌。(我还不清楚ALC的语法)
  • 令牌数组将包含,例如
    [“加载”、“#”、“15”、“加载”、“#”、“16”]
    等等
  • 然后我在代币上循环
  • 如果一个标记是一个数字-我把它转换成二进制字符串
  • 如果标记可以通过词汇表进行翻译,我将其切换为二进制表示
  • 否则我会打印一个错误


注意:如果输出应该填充“0”-即使问题中没有指定,我也会使用
“0000”。子字符串(n.length)+n

问题是我还想将文本转换为特定的数字。因此,每当我在第一个文本区域中键入时,它就会在下一个区域中弹出,显示数字。例如,上面的状态为Load=“001”,因此,如果我写了Load 15,右边的框将显示=001 1111,如果你能给出一个ALC输入(无输出)的公平示例,那就太好了。例如,是加载(15)还是加载(15)等等。。您需要的是一个解析器。一旦你拿到代币,你的工作实际上就完成了。ALC输入将是Load#15,输出将是001 0 1111问题不一致。负载为001或010。。不能两者兼而有之。如果需要4位,则应为0001或0010,但不能同时为两者。我从未见过最后用0填充,它修改了数字,这是一种非常糟糕的做法。@guymograbi-我看不出它有多么不一致。第四位始终设置为
0
。仔细阅读问题。我认为他们还希望能够在输入中使用多个单词,并将单词翻译成多个数字,例如,
Load Store
将变成
001 010
。我认为他们想要做的是将一个数字转换为二进制附加到它,以生成一个字节。因此,一个过程是“加载15”,它将转换为“00101111”。这是常见的指令集架构。谢谢Matt,但我面临一个问题,当我输入Load时,它会显示[object object]001,看起来你走对了方向。看起来您正试图向对象添加
001
。您可以发布您现在得到的代码(最好是在JSFIDLE中),或者用您的进度更新原始问题吗?TLDR-请提供更多解释。您为什么使用document.querySelector而不是document.getElementById?这很接近,但在声明
操作数时不需要
切片
。在这之后,我得到了正确的机器代码。@MattDiamant-输入应该类似于
Load#15
。我正在使用
slice
删除
#
@karchigh,因为
querySelector
规则?没有人关心IE7。@AaditMShah ahhh,我没有输入一个“#”。如果我想包含多行,就像我在输入端彼此下面写加载、存储一样,那么另一端也会在彼此下面打印。@user2220070:必须写一些额外的行进行格式化。而且很可能会改变之前的阅读方式。因为大多数情况下,线条都是这样的,对吗?加载寄存器数据,存储寄存器数据。因此,每一行都应该被读取,它们各自的数据应该填充在右边。所有的行在每一行中只有一个操作码,也许我应该这样说