Javascript:一个字节应该是8位

时间:2014-06-21 00:51:49

标签: javascript binary

编辑:http://www.ascii-code.com/我将BIN列视为二进制,但我显然遗漏了一些东西..

为什么二进制转换对我不起作用?

小写字母b是字符代码98

console.log((98).toString(2));

输出

1100010

当输出长度为8时,输出长度为7

一个字节是8位!!?

修改

  

比特组构成字节当8比特组合在一起时,它被称为字节。字节是计算机用来表示各种字符的字节,例如键盘上显示的字符。

引自:http://wordsmuggler.com/Learn/Binary

我现在真的不明白我应该读什么。如果我在谷歌上看到我总是被告知8但在这里我被告知不同。请解释,因为我不明白我应该理解什么

2 个答案:

答案 0 :(得分:12)

.toString(2)不产生数字的8位表示的原因是toString适用于多于0到255的数字。例如:

(1).toString(2) ==> "1"
(2).toString(2) ==> "10"
(3).toString(2) ==> "11"
(4).toString(2) ==> "100"
(25).toString(2) ==> "11001"
(934534534).toString(2) => "110111101100111101110110000110"

因此,JavaScript对toString(2)所做的只是简单地给出基数2中的数字,即0,1,10,11,100,101等,就像我们编写数字的基数10一样0,1,2,3,4,5,...我们并不总是填写我们的数字来制作一定数量的数字。这就是为什么你没有在输出中看到8个二进制数字。

现在,您遇到的问题是“我如何获取0..255范围内的数字并在JavaScript中将其显示为二进制编码的BYTE?事实证明,需要程序员完成;它不是JavaScript中的内置操作!在base-2中编写一个数字,写一个8位是相关的问题,但它们是不同的。

要做你想做的事,你可以写一个函数:

function byteString(n) {
  if (n < 0 || n > 255 || n % 1 !== 0) {
      throw new Error(n + " does not fit in a byte");
  }
  return ("000000000" + n.toString(2)).substr(-8)
}

以下是它的使用方法:

> byteString(-4)
Error: -4 does not fit in a byte
> byteString(0)
'00000000'
> byteString(7)
'00000111'
> byteString(255)
'11111111'
> byteString(256)
Error: 256 does not fit in a byte

答案 1 :(得分:0)

这是另一种解决方案:

test = "11001";
while(test.length<7){
  test="0"+test;
}

它像这样单行工作:

while(test.length<7)test="0"+test