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

Convert arbitary string to number between 0 and 1 in Javascript

本文关键字:之间 数字 转换 Javascript 任意 字符串      更新时间:2023-09-26

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

目标是将每个 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);
      }
     }
    }

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

对优雅的解决方案有什么想法吗?

非常感谢您的帮助!

知道系统以 64 为 base 64 (26+26+10+2),只需读取每个符号,将其添加到总数并在每次迭代时将结果乘以 64。最后你会有一个整数。将其除以最大值以将其规范化为 0-1 范围。

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

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