long в массиве - прошу помощи

vlady
Offline
Зарегистрирован: 04.07.2020

Добрый день! Друзья, помогите разобраться со странным поведением 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);
 }
}

Проблема в том, что записанные в массив числа и прочитанные из него не совпадают! 

В чем ошибка?
 
Спасибо!
vlady
Offline
Зарегистрирован: 04.07.2020

Разобрался. Нужно было инициализировать массив тоже как Long

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Нет, в 23-й строке надо было печатать TArray[i], а не TData.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

И зачем? Чтобы что?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Чтобы числа совпадали.

Проблема ведь заявлена именно в этом.

Цитата:
Проблема в том, что записанные в массив числа и прочитанные из него не совпадают!

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Тогда, следуя Вашей логике, именно ЗАПИСАННЫЕ и печатались бы. Все бы совпадало в «выводе», но не в «оригинале и сохраненном». 

Типа троллинг, как я понял )))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

BOOM пишет:

Тогда, следуя Вашей логике, именно ЗАПИСАННЫЕ и печатались бы. Все бы совпадало в «выводе», но не в «оригинале и сохраненном». 

Так Вы внимательно перечитайте ТС, именно об этом он и говорил.

А тот факт, что int32 может не поместиться в int16, настолько банален, что явно не заслуживает обсуждения.