C # помогает разделить два байта слова на байты - PullRequest
0 голосов
/ 13 июля 2011

Здравствуйте. Я относительно новичок в программировании на 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 заключается в том, что при его отправке он не дополняется достаточным количеством нулей. Я думаю, что это просто отправлено как <11111> вместо <00011111>, как требуется.

Любая помощь будет очень цениться Спасибо :)

Ответы [ 3 ]

2 голосов
/ 13 июля 2011
byte[] byteToSend = new byte[] { 0x10, 0x02, 0x47, 0x10, 0x03, 0x1F, 0x42 }
                                                               -----^

Или используйте BitConverter (который понимает порядок байтов):

var bytes = BitConverter.GetBytes(0x421F);
0 голосов
/ 13 июля 2011

Это правильно?

        ushort value = 0x421F;
        byte value1 = (byte)(0x421F & 0xFF);
        byte value2 = (byte)(0x421F >> 8);
0 голосов
/ 13 июля 2011
byte[] byteToSend = new byte[] { 0x10, 0x02, 0x47, 0x10, 0x03, 0x1F, 0x42 }
                                                               -----^

Вам нужно перевернуть байты , если целевой машине нужен порядок с прямым порядком байтов (вероятно, если это, например, x86). Если это big-endian, используйте

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

как писал Роберт Харви.

(Если вы не уверены в порядке байтов, просто попробуйте оба.)

...