C#help将两个字节的字分成字节

时间:2011-07-13 05:43:23

标签: c# serial-port bytearray

您好,我对C#编程比较陌生,并希望得到一些帮助,我正在编写一个程序,通过RS232与机器通信,需要发送一系列字节来启动COM。我在数据包的末尾有一个双字节16位CRC字,我认为我需要将其分成两个字节以适应字节数组

// { <DLE> , <STX> , "G" , <DLE> , <ETX> , 16 BIT CRC CCITT split into two bytes}

byte[] byteToSend = new byte[] { 0x10, 0x02, 0x47, 0x10, 0x03, 0x421F };

当我将0x421F转换为二进制并将其分成两半时,我得到0x42和0x1F 然而,不太重要的字节0x1F的问题是当它被发送时,它没有填充足够的零。我认为它只是发送为&lt; 11111&gt;而不是&lt; 00011111&gt;根据需要。

任何帮助都会非常感激 谢谢 :)

3 个答案:

答案 0 :(得分:2)

byte[] byteToSend = new byte[] { 0x10, 0x02, 0x47, 0x10, 0x03, 0x1F, 0x42 }
                                                               -----^

或者使用BitConverter(理解字节顺序):

var bytes = BitConverter.GetBytes(0x421F);

答案 1 :(得分:0)

byte[] byteToSend = new byte[] { 0x10, 0x02, 0x47, 0x10, 0x03, 0x1F, 0x42 }
                                                               -----^

如果目标计算机需要little-endian(可能是x86),则需要翻转字节。如果它是big-endian,请使用

byte[] byteToSend = new byte[] { 0x10, 0x02, 0x47, 0x10, 0x03, 0x42, 0x1F }
                                                               -----^
罗伯特哈维写道。

(如果您不确定字节顺序,请尝试两者。)

答案 2 :(得分:0)

这是对的吗?

        ushort value = 0x421F;
        byte value1 = (byte)(0x421F & 0xFF);
        byte value2 = (byte)(0x421F >> 8);