【问题标题】:Convert binary string to string in javascript在javascript中将二进制字符串转换为字符串
【发布时间】:2023-03-30 07:05:01
【问题描述】:

我有一个二进制字符串,我想将其转换为字符串格式。 这是函数,

let stringConversion = (n) => {
  let convertToString = n.toString();
  console.log(convertToString);
};

stringConversion(00000000000000000000000000001011);

我想要的输出是“00000000000000000000000000001011”,但它给了我“521”

【问题讨论】:

  • 您交出一个前导零的数字。如果可能,此值以八进制读取。
  • 00000000000000000000000000001011 不会被解释为二进制数。那将是0b1011。但无论哪种方式,您都无法始终取回源代码中使用的相同表示。在运行时0b0000010110b1011 之间没有区别。或许可以提供更多关于您在此处尝试实现的目标以及原因的信息。
  • 这个000000000000001011 来自哪里?如果它来自用户输入,那么无论如何它都是一个字符串。如果它来自数据库,则永远不会像这样存储,带有前导零。如果它是计算的结果,它也不会有那些前导零。什么样的过程会导致这样的数字?

标签: javascript tostring


【解决方案1】:

在 JS 中,以 0 开头且不包含 9 的数字标记以八进制读取。所以解释器将你的号码转换成贴花基数,你得到一个不同的号码:01011 => (1011)8 = (521)10

如果带有0b 的令牌统计信息也被读取为二进制字符串,因此您可以将其附加到您的号码:0b1011 => (1011)2 = (11)10

现在如果你想转换一个位字符串,那么实际上它应该是一个字符串。你应该做类似stringConversion('00000000000000000000000000001011');

我编写了一些代码来帮助您找到将二进制字符串编码/解码为 UNSIGNED(理论上)无限数的正确方法。如果要保留符号,则应为二进制字符串提供更多信息,例如固定长度或假装第一位是符号。

function binary2number(bitStr) {
  // initialize the result to 0
  let result = 0;

  for (let bit of bitStr) {
    // shift the current result one bit to the left
    result <<= 1;
    // adding the current bit
    result += !!parseInt(bit);
  }

  return result;
};

function number2binary(num, minBitLength=0) {
  // converting the number to a string in base 2
  let result = num.toString(2)
  
  // concatenate the missing '0' up to minBitLength
  while (result.length < minBitLength) {
    result = '0' + result;
  }
  return result;
}

console.log('00000000000000000000000000001011 (in 8 base) is interpreted as' ,
   00000000000000000000000000001011, '(in 10 base)');

console.log('00000000000000000000000000001011 =>',
   binary2number('00000000000000000000000000001011'));

console.log('11 =>', number2binary(11, 32), '(32 bits = unsigned int commonly)');

console.log('11 =>', number2binary(11), '(for short)');

现在,这是表示二进制整数的传统方式,但如果您的位字符串应该表示不同的东西,例如浮点数,代码将发生巨大变化。您还可以定义自己的方式来解析该字符串。还有许多潜在的假设,我不会深入研究(如字节序和其他有限内存表示的东西)。

【讨论】:

    猜你喜欢
    • 2014-08-02
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多