C ++到C#代码转换

时间:2012-09-24 18:55:59

标签: c# c++

我试图在C#中模拟一些C ++代码。我不熟悉C ++的复杂工作,也不太了解如何在C#中实现这段代码。

有人可以解释一下这些功能在做什么以及它们的输出是什么?特别是,我不明白“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));

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

strQueryBuffer + strlen(strQueryBuffer) 

相同
&strQueryBuffer[strlen(strQueryBuffer)]

所以它将crc的二进制值附加到strQueryBuffer

的末尾