0

这真的让我很困惑。由于某种未知原因,在程序中存储了一个计数器来跟踪两个数据库之间的状态。这只是本质上只是一个增量计数器。

代码存储此计数器:

byte[] counter;

当它存储在数据库中时,它会呈现为这样的字符串......

0x00010471000001BF001F

我想编写一个应用程序,通过输入两个数字来告诉我一个是否高于另一个以及多少。但我不知道如何将这些数字转换为整数表示。

有谁知道发生了什么以及这是否可能?

4

2 回答 2

4

由于该数字是 20 个十六进制数字(80 位),因此太大而无法存储在 int(32 位)或 long(64 位)中。您可以BigInteger在 .NET 4.0 或更高版本上使用。(在 .NET 4.0 中,您必须添加对 System.Numerics.dll 的引用)

var bigint = new System.Numerics.BigInteger(counter)

正如Øyvind所指出的,上面需要以little-endian顺序排列的字节数组,即new byte [] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } 将评估为 1。如有必要,请使用 Array.Reverse 解决此问题。

由于您将数字作为字符串,因此您应该使用BigInteger.Parse, 但请注意,您必须从头开始修剪“0x”

var bigint = System.Numerics.BigInteger.Parse("00010471000001BF001F",
                 System.Globalization.NumberStyles.HexNumber,
                 System.Globalization.CultureInfo.InvariantCulture);
于 2012-11-22T10:14:03.107 回答
0

基于此解决方案,您可以使用

int intNumber = int.Parse(counter,system.Globalization.NumberStyles.HexNumber);

于 2012-11-22T10:29:12.367 回答