Помогите разобраться с типами char и byte

sanekru
Offline
Зарегистрирован: 05.12.2017
Доброго дня!
 
Запутался в типах, вроде char и byte однобайтовые типы, byte беззнаковое, но char хранит символы ASCII и имеет знаковый тип от -128 до 127, так вот данный код:
void setup() {
Serial.begin(9600);
}

void loop() {

char с = '\x42';
byte b = '\x42';
Serial.print(с);
delay(3000);
Serial.print(b);

while (1);
}
В Serial возвращает "c" как и положено x42 т.е. 'B', но почему b возвращает x36 x36 т.е. 66?
Знаю что обьяснение лежит на поверхности но что то я затупил, поверните моск в нужную сторону pls!!!
b707
Offline
Зарегистрирован: 26.05.2017

а кто вам сказал, что байт можно записывать как '\x42' ? Для числе формат записи - 0x42

sanekru
Offline
Зарегистрирован: 05.12.2017

b707 пишет:

а кто вам сказал, что байт можно записывать как '\x42' ? Для числе формат записи - 0x42

Пробовал и так и так, результат один и тот же (:

kalapanga
Offline
Зарегистрирован: 23.10.2016

В строке 9 Вы печатаете символ с кодом x42 - вот и печатается "B"

В строке 11 Вы печатаете число, которое в шестнадцатеричном виде представляется x42, а в десятичном 66 - вот и выводится 66.

Тут всё расписано: https://www.arduino.cc/reference/en/language/functions/communication/serial/print/

Версия этой странички на нашем сайте, по-моему, не совсем верная.

rkit
Offline
Зарегистрирован: 23.11.2016

Сырой байт выводится с помощью Serial::write.

Serial::print переводит данные в читаемый человеком вид.

sanekru
Offline
Зарегистрирован: 05.12.2017

kalapanga пишет:

В строке 9 Вы печатаете символ с кодом x42 - вот и печатается "B"

В строке 11 Вы печатаете число, которое в шестнадцатеричном виде представляется x42, а в десятичном 66 - вот и выводится 66.

Тут всё расписано: https://www.arduino.cc/reference/en/language/functions/communication/serial/print/

Версия этой странички на нашем сайте, по-моему, не совсем верная.

Спасибо прибольшое, всё встало на свои места, а то совсем мозги потекли, откуда это 66!