Я хочу записать в serialport com1
01 00 00 02 37 30 04
Эта команда для инициализации..
Когда я пишу массив char или массив байтов
c[0] = (char)01;//
c[1] = (char)00;
c[2] = (char)00;
c[3] = (char)02;
c[4] = (char)37;
c[5] = (char)30;
c[6] = (char)04;
serialPort 1.Write(c, 0, c.Length);
byte[] bb1 = System.Text.Encoding.Default.GetBytes(c);
Я вижу в мониторе последовательного порта: 01 00 00 02 25 1E 04 очевидно, 37 преобразуется в 25 и 30 в 1E... Как пройти 37 и 30, а не шестнадцатеричные значения... Я пробовал различные способы...
Монитор последовательного порта показывает значения в шестнадцатеричном формате, поэтому они точно соответствуют точно указанным значениям. Преобразование не происходит, десятичное значение 37 равно 25 в шестнадцатеричном виде, а десятичное значение 30 равно 1E в шестнадцатеричном формате.
Используйте шестнадцатеричную нотацию (0x) для литеральных значений при создании массива, тогда вы увидите, что значения выглядят как ожидаемые в мониторе последовательного порта:
byte[] c = new byte[] {
0x01,
0x00,
0x00,
0x02,
0x37,
0x30,
0x04
};
serialPort 1.Write(c, 0, c.Length);
Проблема заключается в том, что вы указали значения для отправки в десятичном формате и просматриваете их в шестнадцатеричном формате. Очевидно, что будут различия.
Чтобы исправить это, измените свой код, чтобы указать значения в шестнадцатеричном виде, вместо того, чтобы префикс каждого значения 0x, например:
c[0] = (char)0x01;//
c[1] = (char)0x00;
c[2] = (char)0x00;
c[3] = (char)0x02;
c[4] = (char)0x37;
c[5] = (char)0x30;
c[6] = (char)0x04;
serialPort1.Write(c, 0, c.Length);
Затем вы увидите те же значения на выходе, что и ожидаемые.
Также см. @Guffa answer, который показывает лучший способ инициализации массива, по крайней мере, если вы используя С# 3.5.
Вы передаете 37 и 30, а не шестнадцатеричные значения.
Вы говорите о просмотре шестнадцатеричных значений?
Если это так, что вы используете для просмотра вывода последовательного порта? Если это не то, что вы написали, это может быть так, как работает программа.
Если вы хотите передать 37 в hex, используйте 0x37 вместо 37.