Роман, я жеж выше уже писал, получен адрес переменной, в ней для этого процессора в первой ячеке первый байт в четвёртой - 4-й, далее берется адрес 4 го байта и по ЭТОМУ АДРЕСУ помещается байтовая константа
а… понятно теперь а я что-то предложил раз значение в байт значит и считается как байт
Роман, я жеж выше уже писал, получен адрес переменной, в ней для этого процессора в первой ячеке первый байт в четвёртой - 4-й, далее берется адрес 4 го байта и по ЭТОМУ АДРЕСУ помещается байтовая константа
да по порядку отвечаю , только дошел до Вашего сообщения…
Ещё можно через 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 байт то уже в стеке… Вопрос риторически просто пытаюсь понять как физически там распалагаются…
МАССИВ в стеке ! Да вы батенька НАСИЛЬНИК-МЕЧТАТЕЛЬ !
t в стеке ? у меня если я через alloca ложу бред выдает… правда про регистры не подумал
Массив передается как указатель на место где лежит массив.
не суть … не массив … ну пусть строка символов из 30 … довольно распространненая ситуация…
char * t[30];
в функции
оно ж создаться в стеке