这真的让我很困惑。由于某种未知原因,在程序中存储了一个计数器来跟踪两个数据库之间的状态。这只是本质上只是一个增量计数器。
代码存储此计数器:
byte[] counter;
当它存储在数据库中时,它会呈现为这样的字符串......
0x00010471000001BF001F
我想编写一个应用程序,通过输入两个数字来告诉我一个是否高于另一个以及多少。但我不知道如何将这些数字转换为整数表示。
有谁知道发生了什么以及这是否可能?
由于该数字是 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);
基于此解决方案,您可以使用
int intNumber = int.Parse(counter,system.Globalization.NumberStyles.HexNumber);