当前位置:  开发笔记 > 编程语言 > 正文

在NodeJS中模拟C#溢出

如何解决《在NodeJS中模拟C#溢出》经验,为你挑选了0个好方法。

我正在尝试将C#代码翻译成nodejs而且我已经碰壁了.C#中的一个函数使用一个字节来使用BitConverter.toInt64生成3个数字,如下所示:

    var hashText = //Generates Hash from an input here using ComputeHash

    var hashCodeStart = BitConverter.ToInt64(hashText, 0);  
    var hashCodeMedium = BitConverter.ToInt64(hashText, 8);
    var hashCodeEnd = BitConverter.ToInt64(hashText, 24);


 //Does other stuff with the three pieces here

举个例子,如果我使用数组:

var hash = new Byte[] {0xAA, 0x9B, 0x50, 0xA7, 0x56, 0x8D, 0x2A, 0x99, 0x87, 0xA7, 0x24, 0x10, 0xF8,0x1E, 0xC3, 0xA2, 0xF9, 0x57, 0x1A, 0x2D, 0x69, 0x89, 0x83, 0x91, 0x2D, 0xFA, 0xA5, 0x4A, 0x4E, 0xA2, 0x81, 0x25};

那么start,middle和end的值是:

Start : -7409954833570948182

Middle: -6718492168335087737

End : 2702619708542548525

但是使用带有biguinut格式包的NodeJS,我得到以下数字(下面的代码):

start : 12293508287479753369

middle : 9774821171531793314

end : 17966858020764353425

使用以下NodeJS

    var hexed = "aa9b50a7568d2a9987a72410f81ec3a2f9571a2d698983912dfaa54a4ea28125"
    var format = require('biguint-format')

    console.log(hexed.toUpperCase().slice(0, 16))
    console.log("Start is " + format(hexed.toUpperCase().slice(0, 16), 'dec'))

    console.log(hexed.toUpperCase().slice(16, 32))
    console.log("Middle is " + format(hexed.toUpperCase().slice(16, 32), 'dec'))

    console.log(hexed.toUpperCase().slice(32, 48))
    console.log("End is " + format(hexed.toUpperCase().slice(32, 48), 'dec'))

我知道C#的数字由于某些溢出而出现负数,但问题是溢出似乎发生在int64可以存储的最大值之前.

反正我有没有找到这个号码,还是以其他方式模仿C#代码?

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有