c# - 将 vb6 转换为 c#

标签 c# vb6-migration

我正在尝试将一些 vb6 代码转换为 c#,但我有点费劲。 我查看了下面的这个页面和其他类似的页面,但仍然感到困惑。

Why use hex?

下面的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 行的 .Hex 和上面第 1/2 行的“&H”。

最佳答案

注意:这个答案写在 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") 返回整数 20CInt("&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 数据类型,这是一种用于 float 的特殊数据类型- 具有小数精度的点数。那不是你需要的。您的其他方法 Convert.Hex 根本不存在。

关于c# - 将 vb6 转换为 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7106224/

相关文章:

c# - Windows 8 应用程序的打开文件对话框

c# - 如何更改 WPF 工具包中的图例名称

vb6 - VB6中的多个构造函数?

c# - 将 dllimport 从 vb6 转换为 c# 3.5

arrays - VB6中数组索引是从0开始的吗?

c# - 区分x :Name and Name in Wpf application

c# - 根据值限制 IObservable

vb.net - VB6 到 VB.NET Visual Studio 升级向导讨厌我的一些变量名

vb6 - 声明变量时 'As String * 25'是什么意思?

c# - 使用 FileHelper 库解析具有 n 级层次结构的位置记录文件