Изменение старшего байта 4 байтного числа

Роман, я жеж выше уже писал, получен адрес переменной, в ней для этого процессора в первой ячеке первый байт в четвёртой - 4-й, далее берется адрес 4 го байта и по ЭТОМУ АДРЕСУ помещается байтовая константа

а… понятно теперь а я что-то предложил раз значение в байт значит и считается как байт

Роман, я жеж выше уже писал, получен адрес переменной, в ней для этого процессора в первой ячеке первый байт в четвёртой - 4-й, далее берется адрес 4 го байта и по ЭТОМУ АДРЕСУ помещается байтовая константа

да по порядку отвечаю , только дошел до Вашего сообщения… :smiling_face:

Ещё можно через union.

Так попасть в старший байт еще сложнее - как там компилятору на разных платформах в голову взбредет располагать поля …

Дак всё равно колхозинг - что так в байт тыкать, что этак.
На какой-нить ESP, может, это всё равно вылезет боком.

В ARM для такого случая даже специальные инструкции есть для работы с битовыми полями …

это скорее всего хакинг

А там тоже, как ни крути, порядок байтов.

а вот чисто риторический вопрос . если t находится в стеке то ,что я получу на выходе… Ну я иммею ввиду как там будут распалагаться данные. в стеке - адреса идут навстречу куче т.е физически уменьшаются , и вот когда четыре байта я ложу одним число как оно там распалагается в сторону уменьшения или отступает от выделенного адреса на 4 байта и ложит как обычно? вот я положил число в стек
он расположилась по адресу 0х8200 ( не учитываем сейчас биг ендиан - литле ендиан) ,чисто 4 байта собраные в одно число AABBCCDD и попытаюсь такой командой его забрать ’

*((byte*)&t+2)

он мне заберет CC ? или BB или вобще черт знает что , не свое

а сам как думаешь?

Это вы то должны думать. Мне то зачем!

Но вот мне кажется что так как я насильно забираю он возьмет 0x8200+2 т.е 0x8202 и соответственно чужые данные , т.к мои 8200.81FF, 81FE и т.д

  Serial.println(t, HEX);
  Serial.println();
  //t = tt;
  byte mybyte = (*((byte*)&t));
  Serial.println(mybyte, HEX);
  mybyte = (*((byte*)&t + 1));
  Serial.println(mybyte, HEX);
  mybyte = (*((byte*)&t + 2));
  Serial.println(mybyte, HEX);
  mybyte = (*((byte*)&t + 3));
  Serial.println(mybyte, HEX);
AADDEEFF

FF
EE
DD
AA

Для начала хорошо бы понять - а будет ли оно вообще в стеке !
AVR старается через регистры передавать …
Потом уже смотреть отладчиком что там и как легло.
Но ИМХО разницы быть не должно.

Ну хорошо допустим число действительно положит в регистр , а если массив допустим из 100 байт то уже в стеке… Вопрос риторически просто пытаюсь понять как физически там распалагаются…

МАССИВ в стеке ! Да вы батенька НАСИЛЬНИК-МЕЧТАТЕЛЬ !

1 лайк

t в стеке ? у меня если я через alloca ложу бред выдает… правда про регистры не подумал

Массив передается как указатель на место где лежит массив.

не суть … не массив … ну пусть строка символов из 30 … довольно распространненая ситуация…
char * t[30];

в функции
оно ж создаться в стеке