为什么 javascript 中的“btoa”编码适用于 20 位字符串而不是 20 位整数
Why does `btoa` encoding in javascript works for 20 digit string and not 20 digit int?
请考虑以下btoa
输出
btoa(99999999999999999999)
"MTAwMDAwMDAwMDAwMDAwMDAwMDAw"
btoa(99999999999999999998)
"MTAwMDAwMDAwMDAwMDAwMDAwMDAw"
btoa("99999999999999999998")
"OTk5OTk5OTk5OTk5OTk5OTk5OTg="
btoa("99999999999999999999")
"OTk5OTk5OTk5OTk5OTk5OTk5OTk="
我们看到btoa
无法编码 20 位int
的唯一哈希,但能够编码 20 位string
。这是为什么呢?
我最初的猜测是,既然btoa
是基数64
它只能编码小于基数64
的东西,但为什么它能够编码 20 位数字string
呢?
此外,btoa似乎无法编码小于9223372036854775807
int
这是一个2^63
btoa(9223372036854775302)
"OTIyMzM3MjAzNjg1NDc3NjAwMA=="
btoa(9223372036854775303)
"OTIyMzM3MjAzNjg1NDc3NjAwMA=="
因为浮点不精确。请记住,JavaScript 没有整数,除非在某些计算过程中暂时使用;所有 JavaScript 数字都是 IEEE-754 双精度浮点数。 99999999999999999999
不是 IEEE-754 数字中的安全整数值,实际上,如果您这样做:
console.log(99999999999999999999);
。你会知道的
100000000000000000000
最大安全整数(例如,不受浮点精度影响的整数(为 9007199254740991
。
由于btoa
接受一个字符串(当你给它传递一个数字时,这个数字就会被转换为字符串(,只需在你的值周围加上引号:
btoa("99999999999999999999")
=> OTk5OTk5OTk5OTk5OTk5OTk5OTk=
当然,如果该值是数学计算的结果,则不能这样做。您必须更改计算如此大的数字的任何内容,因为它们超出了数字类型的精确范围。
相关文章:
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 为什么我的javascript程序没有将其转换为整数而不是字符串
- Js char数组将字符串整数视为整数
- 将JavaScript字符串转换为整数
- 通过 ajax 将整数转换为字符串
- 为什么Javascript中的整数加空格加字符串会导致数字和字符串的总和?(2++'22'=24)
- JavaScript:计算字符串中特定整数的实例
- 从数字字符串中获取整数
- 解析 Positive 和 Negative 整数的字符串,Javascript
- 如何将字符串解析为整数并保留小数位(如果它们是零)
- 找到字符串值,但需要一个整数
- 字符串到整数的转换-在PHP和Javascript中是相同的
- 在Javascript中作为字符串添加的整数
- Javascript整数到字符串的强制转换不起作用
- 在Javascript中将字符串转换为整数
- 字符串到整数函数不'不起作用
- 将64位整数转换为json编码对象中的字符串的最佳实践
- JAVASCRIPT:将文本转换为字符串/整数
- Lodash:递增的字符串整数
- Javascript字符串/整数比较