long в массиве - прошу помощи
- Войдите на сайт для отправки комментариев
Сб, 04/07/2020 - 21:24
Добрый день! Друзья, помогите разобраться со странным поведением long в массивах.
Есть следующий код:
const byte TQuantity = 32 //количество ячеек массива
unsigned long TData; //ячейка массива, 4 байта
int TArray[TQuantity]; //инициализируем массив
void setup() {
Serial.begin(115200);
}
void loop() {
fillArray ();
readArray ();
delay (5000);
}
void fillArray() {
Serial.println("Fill array: ");
for (int i = 0; i < TQuantity; i++) {
TData = random(0, 65535) * random(0, 65535); //генерируем лонг
TArray[i] = TData;
Serial.print("Строка ");
Serial.print(i);
Serial.print(", значение ");
Serial.println(TData);
}
}
void readArray() {
Serial.println("Decode array: ");
for (int i = 0; i < TQuantity; i++) {
TData = TArray[i];
Serial.print("Строка ");
Serial.print(i);
Serial.print(", значение ");
Serial.println(TData);
}
}
Проблема в том, что записанные в массив числа и прочитанные из него не совпадают!
В чем ошибка?
Спасибо!
Разобрался. Нужно было инициализировать массив тоже как Long
Нет, в 23-й строке надо было печатать TArray[i], а не TData.
И зачем? Чтобы что?
Чтобы числа совпадали.
Проблема ведь заявлена именно в этом.
Тогда, следуя Вашей логике, именно ЗАПИСАННЫЕ и печатались бы. Все бы совпадало в «выводе», но не в «оригинале и сохраненном».
Типа троллинг, как я понял )))
Тогда, следуя Вашей логике, именно ЗАПИСАННЫЕ и печатались бы. Все бы совпадало в «выводе», но не в «оригинале и сохраненном».
А тот факт, что int32 может не поместиться в int16, настолько банален, что явно не заслуживает обсуждения.