【问题标题】:Javascript: A byte is supposed to be 8 bitsJavascript:一个字节应该是 8 位
【发布时间】:2020-05-20 00:45:38
【问题描述】:

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

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

小写b是字符代码98

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

输出

1100010

输出的长度应该是8的时候是7

一个字节是8位!!?

编辑

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

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

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

【问题讨论】:

  • 它不会填充到 8 位的倍数,而不是填充基数为 10 或任何其他基数的输出。它是数字的基数 2 表示,而不是位模式。 (无论如何,位模式是 64 位浮点表示。)
  • .toString 不会给你所有的零。无论如何,在 JavaScript 中,数字不是 8 位,而是64bits

标签: javascript binary


【解决方案1】:

.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

【讨论】:

  • 我做错了,我不想垫。看这里的BIN专栏ascii-code.com我看到的是binary,有什么区别?
  • @BENZ.404 - 我认为在提出更多问题之前,您需要更好地了解二进制数和 ascii。
  • > 比特组组成一个字节 当 8 个比特组合在一起时,它被称为一个字节。字节是计算机用来表示各种字符的东西,例如您在键盘上看到的字符。引用自:wordsmuggler.com/Learn/Binary
  • JavaScript 的 toString(2) 只是给出了一个 base-2 的字符串,与将数字打包成字节没有任何关系。我认为这里的问题是您期望toString(2) 生成一个字节大小的数字编码,但它并没有这样做,也没有承诺这样做。事实上,JavaScript 甚至根本没有字节的概念!它只有Number,这是一种称为 IEEE-754 的 64 位编码。对于某些操作,它有时也会变成 32 位整数编码。 TL;DR 不要指望 JavaScript 来制作“字节”的 8 位模式!它没有。
  • 所以有人可以回答,因为 JavaScript 不会这样做,以便我可以接受,并且其他任何认为它简单的人都会在他们开始尝试这样做之前停下来。
【解决方案2】:

这是另一个解决方案:

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

就像这样在一行中工作:

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

【讨论】:

  • 这个填充是 OP 想要的。如果处理 n
猜你喜欢
  • 2012-11-16
  • 2013-12-08
  • 2012-08-21
  • 2015-05-28
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
相关资源
最近更新 更多