gpt4 book ai didi

Javascript - 将字符串解析为长

转载 作者:太空狗 更新时间:2023-10-29 18:05:44 26 4
gpt4 key购买 nike

我在 python 中有一个工作脚本,使用 long(16) 根据指定的基数将字符串转换为整数:

modulus=public_key["n"]    
modulusDecoded = long(public_key["n"], 16)

打印:8079d7ae567dd2c02dadd1068843136314fa3893fa1fb1ab331682c6a85cad62b208d66c9974bbbb15d52676fd9907efb158c284e96f5c7a4914fd927b7326c40efa14922c68402d05ff53b0e4ccda90bbee5e6c473613e836e2c79da1072e366d0d50933327e77651b6984ddbac1fdecf1fd8fa17e0f0646af662a8065bd873

90218878289834622370514047239437874345637539049004160177768047103383444023879266805615186962965710608753937825108429415800005684101842952518531920633990402573136677611127418094912644368840442620417414685225340199872975797295511475162170060618806831021437109054760851445152320452665575790602072479287289305203

分别。这看起来像是十六进制到十进制的转换。我试图在 JS 中得到相同的结果,但是 parseInt()parseFloat() 产生了完全不同的结果。最重要的是,JavaScript 似乎不喜欢输入字符串中的字符,有时会返回 NaN。

谁能提供一个函数/指导如何获得与 Python 脚本中相同的功能?

最佳答案

JavaScript 中的数字是 float ,因此它们总是在特定数字后失去精度。要获得无限的数字,可以使用 0 到 9 的数字数组,它的范围是无限的。为此,我根据十六进制字符串输入进行十六进制到整数数组的转换,然后使用 double dabble algorithm将数组转换为 BCD。可以轻松打印:

const hexToArray = arr => arr.split("").map(n => parseInt(n,16));


const doubleDabble = arr => {
var l = arr.length;
for( var b = l * 4; b--;){

//add && leftshift
const overflow = arr.reduceRight((carry,n,i) => {

//apply the >4 +3, then leftshift
var shifted = ((i < (arr.length - l ) && n>4)?n+3:n ) << 1;

//just take the right four bits and add the eventual carry value
arr[i] = (shifted & 0b1111) | carry;

//carry on
return shifted > 0b1111;
}, 0);
// we've exceeded the current array, lets extend it:
if(overflow) arr.unshift(overflow);
}
return arr.slice(0,-l);
};

const arr = hexToArray("8079d7");
const result = doubleDabble(arr);
console.log(result.join(""));

Try it

关于Javascript - 将字符串解析为长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46447807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com