我试图在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));
答案 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
的末尾