c++ wchar array to c#

本文关键字:to array wchar c++ | 更新日期: 2023-09-27 18:00:08

我对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让我摔倒了

c++ wchar array to c#

在C中,字符串只是一个包含"字符串"的连续区域,由一个特殊字符终止。换句话说,一个char。(或者wchar_t表示宽字符串。)

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


关于+8,它只是在复制时跳过wsSerial的前八个字符。要理解这一点,您应该阅读有关"指针算术"的内容。

它是这样的:

string wsSerial = mSerial;
string wsS2 = wsSerial.Substring(8, 8);
long ulCode2 = long.Parse(wsS2);

看起来几乎已经完成了,但调用的第一个参数

wsSerial.Substring() 

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