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

标签 javascript

我正在处理具有 8DnKOc6FISU、rNsrl86inpo、5qcmCUsw4EQ 等 ID 的 Youtube 视频(即 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);
      }
     }
    }

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

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

非常感谢您的帮助!

最佳答案

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

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

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

关于javascript - 在 Javascript 中将任意字符串转换为 0 到 1 之间的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11222978/

相关文章:

javascript - 如何在epub3文件中添加在线图像?

javascript - Material Ui 代码在 codepen 中运行良好,但在 VSCODE 中运行不佳?

javascript - 如何使用 ng-repeat 选择所有元素,但没有一些类

javascript - 在浏览器中禁用突出显示

javascript - Android - 将外部 .js 文件加载到 Web View 中然后访问它的功能?

javascript - 位置 :Absolute Not Respecting It's Elders

javascript - 如何根据 jquery 中的选定选项卡交换选项卡名称

javascript - 如何突出显示 handsontable 的选定行和标题?

jquery - 如何检测 DOM 是否已完成构建?

javascript - 如何在 JavaScript 中对具有多个字段值的对象数组进行排序