icedev Asked:2020-10-10 16:45:37 +0800 CST2020-10-10 16:45:37 +0800 CST 2020-10-10 16:45:37 +0800 CST SerialPort 中的二进制命令 772 下午好。告诉我如何将二进制命令提供给 SerialPort.Write(); 例如,根据协议,我有命令 29h; c# 1 个回答 Voted Best Answer Qwertiy 2020-10-10T16:53:39+08:002020-10-10T16:53:39+08:00 首先,了解团队的规模。它不是二进制的,但它确实有一个以字节为单位的长度。然后创建适当的字节数组并发送它。 byte cmd = new byte[] { 0x29 }; // 1 байт byte cmd = new byte[] { 0x29, 0x00 }; // Little indian, 2 байта byte cmd = new byte[] { 0x00, 0x29 }; // Big indian, 2 байта byte cmd = BitConverter.GetBytes(0x29); // Зависит от текущей архитектуры, 4 байта sp.Write(cmd, 0, cmd.Length) 我被一件事弄糊涂了,在破洞的解密中是这样写的:消息格式:字节0:STX消息开始的符号;字节 1:消息长度 (N) - BIN。字节 0、LRC 和该字节不包括在消息长度中;字节 2:命令或响应代码 - 二进制数;Bytes 3...(N+1):命令相关参数(可以省略);字节 N+2 - 消息校验和 - 字节 LRC - 通过消息的所有字节(字节 0 除外)的按位加法 (XOR) 计算得出。 const byte STX = 0; // Или чему там? byte cmd = new byte[] { STX, default(byte), 0x29, default(byte) }; cmd[1] = cmd.Length - 3; for (int q=1, last=cmd.Length-1; q<last; ++q) cmd[last] ^= cmd[q]; sp.Write(cmd, 0, cmd.Length)
首先,了解团队的规模。它不是二进制的,但它确实有一个以字节为单位的长度。然后创建适当的字节数组并发送它。