2013-02-18 91 views
4

我没有C++的知识,我必须将一些代码转换为C#。我设法做了一些工作,但是我不太懂得如何转换几行文字,所以我在这里寻求帮助。C++ wchar数组到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让我失望。

回答

2

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

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


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

1

它看起来像你几乎所有的方式出现,但在呼叫的第一个参数

wsSerial.Substring() 

应为8,第二个应该是MAX_PATH零下8

+0

实际上,在C代码OP正在终止,经过8个字符,所以长度应8. – 2013-02-18 12:17:21

+0

否,原来是将8与源指针,所以开始复制8个字符。 – 2013-02-18 16:14:42

+0

是的,但请看下一个源代码行。 – 2013-02-18 16:45:25

1

是这样的:

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