vb6到c#的转换

本文关键字:转换 vb6 | 更新日期: 2023-09-27 18:05:53

我正试图将一些vb6代码转换为c#,我有点挣扎。我已经看了下面这个页面和其他类似的页面,但仍然被难住了。

为什么使用十六进制?

vb6代码如下:

    Dim Cal As String
    Cal = vbNull
    For i = 1 To 8
        Cal = Cal + Hex(Xor1 Xor Xor2)
    Next i

这是我的c#代码-它仍然有一些错误。

        string Cal = null;
        int Xor1 = 0;
        int Xor2 = 0;
        for (i = 1; i <= 8; i++)
            {
            Cal = Cal + Convert.Hex(Xor1 ^ Xor2);
            }

错误如下:

        Cal = Cal + Convert.Hex(Xor1 ^ Xor2 ^ 6);

关于为什么我不能得到十六进制转换的任何建议将不胜感激。我怀疑是我对上面第3行的。十六进制和上面第1/2行的"&H"的理解不够。

vb6到c#的转换

注释:这个答案写在问题中Xor1 = CDec("&H" + Mid(SN1, i, 1)) Xor1 = Convert.ToDecimal("&H" + SN1.Substring(i, 1));行仍然存在的地方。


&H是什么

在Visual Basic(旧的VB6和VB.NET)中,十六进制常数可以通过使用&H前缀来使用。例如,myValue = &H20将值32赋值给变量myValue。由于这种惯例,VB6的转换函数也接受这种表示法。例如,CInt("20")返回的是整数20, CInt("&H20")返回的是整数32

您的代码示例使用CDec将值转换为数据类型Decimal(实际上是Variant的Decimal子类型),然后将结果赋值给整数,导致隐式转换。这实际上是不必要的,使用CInt将是正确的。显然,编写VB6代码的人不理解(a) Decimal数据类型和(b)用十进制表示数字是两种完全不同的东西。


那么,我如何在十六进制表示法和c#中的数字数据类型之间转换字符串?

使用

将十六进制字符串转换为数字
int number = Convert.ToInt32(hex, 16);   // use this instead of Convert.ToDecimal
在c#中,不需要在开头用"&H"填充值。第二个参数16告诉转换函数该值是以16为进制的(即十六进制)。 另一方面,要将数字转换为十六进制表示,使用
string hex = number.ToString("X");       // use this instead of Convert.ToHex

您正在使用的Convert.ToDecimal所做的事情完全不同:它将值转换为decimal数据类型,这是一种用于具有十进制精度的浮点数的特殊数据类型。这不是你需要的。您的另一个方法Convert.Hex根本不存在。