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);
所以我有两个问题:
- wsSerial是C++中的一个数组,但我在C#中不需要数组,是吗?我的意思是,它所做的只是存储一个大数字,然后将其转换为数值,对吧
- 这到底是干什么的?wcscpy_s(wsS2、MAX_PATH、wsSerial+8)。+8让我摔倒了
在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。