2013-02-18 2 views
4

У меня нет знаний о C++, и мне нужно свернуть код на C#. Мне удалось сделать несколько бит, но я не совсем понимаю, как преобразовать несколько строк, поэтому я здесь прошу помощи.C++ wchar array to 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

В строке С есть просто смежная область, содержащая «строку» символов, заканчивающуюся специальным символом. Другими словами, массив из char. (Или wchar_t для широкосимвольных строк.)

В C# (и C++) это не нужно, поскольку оно имеет свой собственный специальный тип string, который обрабатывает массивные объекты за кулисами.


Что касается +8 вещей, он просто пропускает первые восемь символов wsSerial при копировании. Чтобы понять это, вы должны прочитать «арифметика указателя».

1

Похоже, вы почти все пути, но первый аргумент в вызове

wsSerial.Substring() 

должно быть 8, то второй должен быть MAX_PATH минус 8.

+0

на самом деле, в коде C ОП завершаю, что после 8-символа, так что длина должна быть 8. –

+0

Нет, оригинал добавление 8 к указателю источника, так что начиная копия 8 символов. –

+0

Да, но посмотрите на следующую строку источника. –

1

Это так :

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