4

我不了解 C++,我必须将一些代码转换为 C#。我已经设法做了一些工作,但我真的不明白如何转换几行,所以我在这里寻求帮助。

这是 C++ 代码:

            WCHAR wsSerial[MAX_PATH]={'\0'};
            WCHAR wsS2[MAX_PATH]={'\0'};

            wcscpy_s(wsSerial, MAX_PATH, m_strSerial);
            wcscpy_s(wsS2,MAX_PATH,wsSerial+8);
            wsS2[8]=NULL;
            ULONG ulCode2 = wcstoul(wsS2, NULL,10);

这就是我在 C# 中所拥有的:

        string wsSerial;
        string wsS2;

        wsSerial = mSerial; //an external input
        wsS2 = wsSerial + 8;
        wsS2= wsSerial.Substring(0, 8);
        long ulCode2 = long.Parse(wsS2);

所以我有两个问题:

  1. wsSerial 是 C++ 中的一个数组,但我在 C# 中不需要这个数组,对吗?我的意思是,它所做的只是存储一个大数字,然后将其转换为数值,对吗?
  2. 这究竟是做什么的?wcscpy_s(wsS2,MAX_PATH,wsSerial+8)。+ 8 让我失望。
4

3 回答 3

2

在 C 中,字符串只是一个包含字符“字符串”的连续区域,以特殊字符终止。换句话说,一个数组char。(或者wchar_t对于宽字符串。)

在 C#(和 C++)中,这不是必需的,因为它有自己的特殊string类型,可以在后台处理数组内容。


关于这+8件事,它只是wsSerial在复制时跳过了前八个字符。要理解这一点,您应该阅读“指针算术”。

于 2013-02-18T11:20:57.843 回答
1

就像这样:

string wsSerial = mSerial;
string wsS2 = wsSerial.Substring(8, 8);
long ulCode2 = long.Parse(wsS2);
于 2013-02-18T12:36:18.543 回答
1

看起来你几乎一直到那里,但调用中的第一个参数

wsSerial.Substring() 

应该是 8,第二个应该是 MAX_PATH 减 8。

于 2013-02-18T11:55:57.623 回答