2013-02-18 95 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);