Массив 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);
Итак, у меня есть два вопроса:
- wsSerial - это массив в C++, но мне не нужен массив для этого в C#, не так ли? Я имею в виду, что все, что он делает, это хранит большое число, которое позже преобразуется в числовое значение, верно?
- Что именно это делает? wcscpy_s(WSS2,MAX_PATH,wsSerial+8). + 8 сбивает меня с толку.
3 ответа
В 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.