4

私は 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);

だから私は2つの質問があります:

  1. wsSerial は C++ では配列ですが、C# ではこれに配列は必要ありませんか? つまり、後で数値に変換される大きな数値を格納するだけですよね?
  2. これは正確に何をしますか?wcscpy_s(wsS2,MAX_PATH,wsSerial+8). + 8 は私を失望させます。
4

3 に答える 3

2

C では、文字列は、文字の「文字列」を含む連続した領域であり、特殊文字で終了します。つまり、 の配列ですchar。(またはwchar_tワイド文字列の場合。)

C# (および C++) では、バックグラウンドで配列を処理する独自の特殊なstring型があるため、これは必要ありません。


事に関しては、コピー時に+8最初の8文字を単純にスキップします。wsSerialこれを理解するには、「ポインター演算」について読む必要があります。

于 2013-02-18T11:20:57.843 に答える
1

あなたはほとんどそこにいるように見えますが、への呼び出しの最初の引数

wsSerial.Substring() 

2 番目は MAX_PATH から 8 を引いた値になります。

于 2013-02-18T11:55:57.623 に答える