用Javascript将大整数转换为十六进制字符串
Convert A Large Integer To a Hex String In Javascript
我需要找到一种方法,用javascript将一个大数字转换为十六进制字符串。我直接尝试了myBigNumber.toString(16)
,但如果myBigNumber
的值非常大(例如1298925419114529174706173),那么myBigNumber.toString(16)
将返回错误的结果,这太棒了。我试着用自己的函数写如下:
function (integer) {
var result = '';
while (integer) {
result = (integer % 16).toString(16) + result;
integer = Math.floor(integer / 16);
}
}
然而,模16的大数字都返回0(我认为这个基本问题是导致toString
问题的原因。我也尝试用(integer - 16 * Math.floor(integer/16))
替换(integer % 16)
,但也有同样的问题。
我也看过Big Integer Javascript库,但这是一个巨大的插件,希望是相对简单的问题。
有没有想过如何才能得到一个有效的结果?也许是某种分而治之的方法?我真的很困在这里。
假设您的整数存储为十进制字符串,如'1298925419114529174706173'
:
function dec2hex(str){ // .toString(16) only works up to 2^53
var dec = str.toString().split(''), sum = [], hex = [], i, s
while(dec.length){
s = 1 * dec.shift()
for(i = 0; s || i < sum.length; i++){
s += (sum[i] || 0) * 10
sum[i] = s % 16
s = (s - sum[i]) / 16
}
}
while(sum.length){
hex.push(sum.pop().toString(16))
}
return hex.join('')
}
有问题的数字高于javascript的最大整数。然而,你可以通过字符串处理如此大的数字,并且有一些插件可以帮助你做到这一点。在这种情况下特别有用的一个例子是hex2dec
我采用的方法是使用bignumber.js
库并创建一个以字符串形式传入值的BigNumber
,然后只使用toString
转换为十六进制:
const BigNumber = require('bignumber.js');
const lrgIntStr = '1298925419114529174706173';
const bn = new BigNumber(lrgIntStr);
const hex = bn.toString(16);
相关文章:
- 将十六进制字符串转换为字节数组
- JavaScript 中两个十六进制字符串的 XOR
- 在JavaScript/NodeJS中压缩十六进制字符串
- 不带编码的十六进制字符串
- 在 Javascript 中更轻松地处理十六进制字符串和十六进制值
- 从十六进制字符串中获取原始十六进制
- 实时颜色选择器 HSV 到十六进制字符串
- 如何将中文十六进制字符串解码为中文字符或JavaScript
- 在 JavaScript 中将原始图像的十六进制字符串转换为位图图像
- 用Javascript将大整数转换为十六进制字符串
- 将十六进制字符串转换为十六进制类型
- javascript中字节数组到十六进制字符串的转换
- ByteArray的十六进制字符串
- 如何从十六进制字符串构建二进制数组
- Meteor返回无效的十六进制字符串错误试图创建ObjectID
- 将十六进制字符串转换为javascript中的整数数组
- 相当于python's int('十六进制字符串',16)
- JavaScript中十六进制字符串到字节值的稳健转换
- 如何在js中将数字转换为十六进制字符串
- 如何将浮点数转换为JavaScript中的4byte十六进制字符串并返回