-3

C# で C++ コードをエミュレートしようとしています。私は C++ の複雑な仕組みに慣れておらず、C# でこのコードを実装する方法をよく理解していません。

誰かが関数が何をしているのか、そしてそれらの出力がASCIIでどうなるかを説明してもらえますか? 特に、このコードの書き方では「memcpy」メソッドが何をしているのかわかりません。

//example values
str = "<Request Type="Query" Version="1.0"></Request>"
uintcrc = getCrc(str, strlen(str));

//code i don't understand

//create a byte array with a null terminator?
memset(strQueryBuffer, '\0', sizeof(str));
//print the values into the byte array
sprintf(strQueryBuffer, "%c%s%c", COMM_STX, str, COMM_ETX);

//append the uintcrc to the end of the byte array?
memcpy(strQueryBuffer + strlen(strQueryBuffer), &uintcrc, sizeof(uintcrc));
4

2 に答える 2

4

それ以外は何もしません

 strQueryBuffer = COMM_STX + "<Request Type='Query' Version="1.0"></Request>" + COMM_ETX + Encoding.Ascii.GetString(BitConverter.GetBytes(uintcrc));

バイナリシステムがあり、完全な情報をバイナリで送信したい場合は、次のように書くこともできます。

 var str = "<Request Type='Query' Version="1.0"></Request>";
 byte[] Data = (new [] { COMM_STX }).Concat(Encoding.Ascii.GetBytes(str)).Concat(new [] { COMM_ETX }).Concat(BitConverter.GetBytes(uintcrc)).ToArray();
于 2012-09-24T19:01:40.780 に答える
0
strQueryBuffer + strlen(strQueryBuffer) 

と同じです

&strQueryBuffer[strlen(strQueryBuffer)]

したがって、crcのバイナリ値をstrQueryBufferの最後に追加します

于 2012-09-24T19:04:19.840 に答える