【问题标题】:Revealing the whole binary in jquery在 jquery 中显示整个二进制文件
【发布时间】:2014-02-20 03:24:39
【问题描述】:

我想知道 jquery 怎么可能显示一个数字的整个二进制而不去掉前导零。

看一下代码:

在 HTML 中:

<input id="input" type="text" size="20">
<input id="result" type="text" size="30">
<input id="submit" type="button">

在 jQuery 中:

    $(document).ready(function(){

    $("#submit").click(function(){
        var x = $("#input").val(); 
        var array = x.split(".");
        $("#result").val((array[0]*1).toString(2) + " " + (array[1]*1).toString(2) + " " + (array[2]*1).toString(2) + " " + (array[3]*1).toString(2));  

    });

});

例如,当我使用数字 128 时,结果为 100000000(正确),但当我使用数字 1 时,结果将是 1 而不是 00000001,或者对于 32,结果将是 100000 而不是 00100000,它不会t 显示前导零。

jsfiddle 自己尝试一下。

任何想法如何出现前导零?

还可以一次在整个数组中应用.toString(),而不必手动将其添加到每个数组中?

提前致谢。

【问题讨论】:

    标签: javascript jquery html binary


    【解决方案1】:

    100000001 一样正确,它们都不是“完整的”。如果您更喜欢后者,则应添加任意数量的零作为补充。

    要补足8的长度,例如,你可以这样做:

    var s = yourNumber.toString(2);
    var completed = "00000000".slice(s.length) + s;
    

    编辑:

    对于您刚刚添加的新问题,如果您想将此转换应用于拆分字符串的所有部分,请执行

    var completedNumbers = $("#input").val().split(".").map(Number).map(function(v){
         var s = v.toString(2);
         return "00000000".slice(s.length)+s
    });
    var joinedCompletedNumbers = completedNumbers.join(' ');
    

    【讨论】:

    • 由于某种原因,第一个代码没有按预期工作,因为它没有将数字转换为二进制,但第二个工作完美,这正是我想要的,谢谢。
    • @Nick 第一个代码是为了让其他用户更清楚,您必须使用x 而不是yourNumber。抱歉,如果不清楚。
    • 是的,我将 yourNumber 更改为 x,但它不起作用。出于好奇,我又试了一次,但它没有将任何数字转换为二进制。第二个就像一个魅力,一个笔记认为,在最后而不是声明另一个变量,你可以在 .map(function(v){}).join(' 的末尾添加 .join(' ') ');但我想你这样做只是为了让别人更清楚地阅读和理解发生了什么。再次感谢。
    • @Nick 我明白了你遇到的问题:yourNumber 必须是一个数字,而不仅仅是一个包含数字的字符串(即 "2" 不行,而 2 是)。该解析步骤在第二个代码中使用map(Number) 完成。
    • sigh 是的,你是对的,我忘了它是一个字符串。我再次对其进行了测试,现在它可以正常工作了。再次感谢。
    【解决方案2】:

    您可以使用此功能来确定要显示多少个前导零。假设您要显示 8 位数字。那么……

    function pad (str, max) {
          str = str.toString();
          return str.length < max ? pad("0" + str, max) : str;
        }
    

    并像使用它

     your_result=pad(your_result, 8);
    

    如果你得到结果 1,这将给出 00000001。

    【讨论】:

    • 您的代码对我来说效果最好,但它没有将数字转换为二进制,但我找到了这个 var test = pad((array[0]*1).toString( 2), 8);感谢您的帮助。
    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 2016-08-22
    • 2012-09-30
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2021-04-01
    相关资源
    最近更新 更多