Javascript:一个字节应该是8位

BEN*_*404 6 javascript binary

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

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

小写字母b是字符代码98

console.log((98).toString(2));
Run Code Online (Sandbox Code Playgroud)

输出

1100010
Run Code Online (Sandbox Code Playgroud)

当它应该是8时,输出的长度是7

一个字节是8位!!?

编辑

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

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

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

Ray*_*oal 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"
Run Code Online (Sandbox Code Playgroud)

所以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)
}
Run Code Online (Sandbox Code Playgroud)

以下是它的使用方法:

> 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
Run Code Online (Sandbox Code Playgroud)

  • @ BENZ.404 - 在提出更多问题之前,我认为你需要更好地理解二进制数和ascii. (3认同)