在Javascript中将任意字符串转换为0到1之间的数字

时间:2012-06-27 09:16:53

标签: javascript

我正在使用Youtube视频,其中包含8DnKOc6FISU,rNsrl86inpo,5qcmCUsw4EQ等ID(即A-Za-z0-9 _-中的11个字符)

目标是将每个id转换为颜色(由范围0-1表示),以便可以可靠地绘制图表。

根据this question,这些是64位数字。鉴于:

  • 我想充分利用任何给定视频集的色彩空间
  • 无论如何,色彩感知都不准确

......以id的最后2-3个字符为基础似乎是明智的。

我的主导方法是我从here借来的函数,它将每个字符转换为二进制数,如下所示:

    function toBin(str){
     var st,i,j,d;
     var arr = [];
     var len = str.length;
     for (i = 1; i<=len; i++){
      d = str.charCodeAt(len-i);
      for (j = 0; j < 8; j++) {
       st = d%2 == '0' ? "class='zero'" : "" 
       arr.push(d%2);
       d = Math.floor(d/2);
      }
     }
    }

但这就留下了如何将其转换回浮动的问题。

有关优雅解决方案的任何想法吗?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:3)

知道系统是基数64(26 + 26 + 10 + 2),只需读取每个符号,将其添加到total并在每次迭代时将结果乘以64。最后,您将得到一个整数。除以最大值,将其标准化为0-1范围。

当你的ID接近2 53 时,你将开始失去精确度,因为这是JS可以精确表示整数的最大值。

或者你可以从一开始就为每个位置添加(letter_index / 64 letter_position )来计算浮点数,但是你在处理过程中会失去更多的精度。