c ++ wchar массив для c #

У меня нет знаний о 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 сбивает меня с толку.

4

Решение

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

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


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

2

Другие решения

Это вот так:

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

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

wsSerial.Substring()

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

1
По вопросам рекламы [email protected]