Здравствуйте!
что значит запись (byte*) в примере про CRC.
что здесь делает *
if (Serial.readBytes((byte*)&rxData, sizeof(rxData)))
https://arduino.ru/forum/programmirovanie/peredat-i-prinyat-integer-po-serial?page=1#comment-318007
Ну это легкотня, вот:
Да я знаком с темой “указатели”, но не понимаю как читать эту запись…
вроде как массив хранит целые числа, но читается как массив байт… но зачем *?
о прошу прощение ссылку прикрепил не на тот источник.
введите или вставьте// структура данных посылки
struct MyData {
byte channel;
int val_i;
float val_f;
byte crc; // байт crc
};
MyData rxData;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.readBytes((byte*)&rxData, sizeof(rxData))) { // читаем дату
byte crc = crc8((byte*)&rxData, sizeof(rxData)); // считаем crc посылки полностью
if (crc == 0) {
// данные верны
} else {
// данные повреждены
}
}
}
byte crc8(byte *buffer, byte size) {
byte crc = 0;
for (byte i = 0; i < size; i++) {
byte data = buffer[i];
for (int j = 8; j > 0; j--) {
crc = ((crc ^ data) & 1) ? (crc >> 1) ^ 0x8C : (crc >> 1);
data >>= 1;
}
}
return crc;
} сюда код
byte crc8(byte buffer, byte size)
вот здесь все понятно, а здесь нет:
Serial.readBytes((byte)&rxData, sizeof(rxData))
это значит, ты незнаком, читай ссылку что я тебе дал, как прочитаешь - спрашивай что непонятно.
Здесь мне тоже непонятно. Вы зачем звёздочку убрали? А оригинале было
Если перед выражением записан тип данных в скобках, то это значит, что данное выражение насильно приводится к этому типу “принудительная конвертация”.
Раз там это понадобилось, то значит, что указатель одного типа приводится к указателю на byte.
х…ция, это называется приведение типов. До тех пор, пока не знаешь точно значения этих слов, не употребляй их, пиши своими словами, и прочитай, наконец, по ссылке насчет указателей.
Потому что crc8 ожидает в параметре byte * - указатель на байты. Указатель на int-ы несовместим с ним, поэтому принудительно конвертируется. Звёздочка нужна обязательно чтобы получился нужный тип.
Был бы ты бабой, подумал бы, что у тебя жуткий недотрах.
может я и есть баба, с жутким недотрахом, это тебя сделало умнее? если да - пусть так и будет, но теперь ты без моих советов обойдешься, явно)
Пару дней этот форум почитываю и та лёгкость с которой какие то пустяки и неважные вещи вызывают агрессию, обвинения и срачи удивляет. Терпимее надо быть.
Кому?
Всем. Это заранее выгодная позиция.
А то может оказаться, что русское “приведение типов” по английски это “type conversion”.
И получается неудобно.
А еще coercion и jugglinh, но статья на вики названа именно conversion.
ну а чево ты до конца не дочитал? клиповое мышление? СДВГ мешает? ПТСР? Там же понятным английским языком написано, как для дебилов:
In the C family of languages and ALGOL 68, the word cast typically refers to an explicit type conversion (as opposed to an implicit conversion), causing some ambiguity about whether this is a re-interpretation of a bit-pattern or a real data representation conversion. More important is the multitude of ways and rules that apply to what data type (or class) is located by a pointer and how a pointer may be adjusted by the compiler in cases like object (class) inheritance.
и еще ниже:
но “also called” означает не “называемое только”, а напротив “называемое так же”.
Это значит оба термина верны.
В итоге мы имеем уже десяток комментариев вокруг вопроса который
а) никто не задавал
б) никому не нужен
в) ни на что не влияет
г) терминологически верно и то и другое и еще и третье с четвертым.
Мораль по моему очевидна - и начинать не стоило.