繁体   English   中英

Javascript:一个字节应该是 8 位

[英]Javascript: A byte is supposed to be 8 bits

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

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

小写 b 是字符代码 98

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

产出

1100010

输出的长度为 7 时应为 8

一个字节是 8 位!!?

编辑

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

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

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

.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 中的内置操作!以 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

这是另一个解决方案:

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

它在一行中工作,就像这样:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM