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

在Javascript中将任意字符串转换为介于0和1之间的数字,javascript,Javascript,我正在处理ID为8DnKOc6FISU、rNsrl86inpo、5qcmCUsw4EQ(即集合A-Za-z0-9_-)的Youtube视频 目标是将每个id转换为颜色(由0-1范围表示),以便能够可靠地绘制它们 根据这些数字,它们是64位数字。鉴于: 我想为任何给定的视频集充分利用色彩空间 无论如何,颜色感知并不是那么准确 …以id的最后2-3个字符为基础似乎是明智的 我的引导方法是借用的函数,它将每个字符转换为二进制数,如下所示: function toBin(str){

我正在处理ID为8DnKOc6FISU、rNsrl86inpo、5qcmCUsw4EQ(即集合A-Za-z0-9_-)的Youtube视频

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

根据这些数字,它们是64位数字。鉴于:

  • 我想为任何给定的视频集充分利用色彩空间
  • 无论如何,颜色感知并不是那么准确
…以id的最后2-3个字符为基础似乎是明智的

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

    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);
      }
     }
    }
托宾函数(str){
var st,i,j,d;
var-arr=[];
var len=str.length;

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

但当ID接近253时,您将开始失去精度,因为这是JS在整数中可以精确表示的最大值


或者,您可以通过添加(字母索引/64字母位置)从一开始计算浮动对于行中的每个位置,但在处理过程中会丢失更多的精度。

计算机显示器无论如何只能使用2^24种不同的颜色,因此有限的精度不是一个真正的问题。不知您是否需要为颜色使用浮点数,您可以只做模2^24的数学运算,而不必担心整数溢出g、 谢谢奥列格,谢谢你的帮助。