我正在使用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);
}
}
}
但这就留下了如何将其转换回浮动的问题。
有关优雅解决方案的任何想法吗?
非常感谢你的帮助!
答案 0 :(得分:3)
知道系统是基数64(26 + 26 + 10 + 2),只需读取每个符号,将其添加到total并在每次迭代时将结果乘以64。最后,您将得到一个整数。除以最大值,将其标准化为0-1范围。
当你的ID接近2 53 时,你将开始失去精确度,因为这是JS可以精确表示整数的最大值。
或者你可以从一开始就为每个位置添加(letter_index / 64 letter_position )来计算浮点数,但是你在处理过程中会失去更多的精度。