А почему не хотите напрямую к нужному байту по указателю обращаться?
Тогда логично (и переносимо) использовать массив из 4 байт.
union
union TOwnValue {
public:
uint32_t AsLong;
uint8_t AsBytes[4];
};
union так же зависит от LE BE …
Пруф
#define printVar(x) do { Serial.print(#x); Serial.print('='); Serial.print(x, HEX); Serial.println(';'); } while (false)
#define printVarADDR(x) do { Serial.print("ADDR("); Serial.print(#x); Serial.print(")="); Serial.print((uint32_t)&x, HEX); Serial.println(';'); } while (false)
#define printVarSize(x) do { Serial.print("sizeof("); Serial.print(#x); Serial.print(")="); Serial.print(sizeof(x)); Serial.println(';'); } while (false)
union TOwnValue {
public:
uint32_t AsLong;
uint8_t AsBytes[4];
};
TOwnValue t;
void setup () {
Serial.begin(9600);
Serial.println("Start");
t.AsLong=0x11223344;
}
void loop() {
printVar(t.AsLong);
printVarADDR(t.AsLong);
printVarSize(t.AsLong);
printVar(t.AsBytes[0]);
printVarADDR(t.AsBytes[0]);
printVarSize(t.AsBytes[0]);
printVar(t.AsBytes[1]);
printVarADDR(t.AsBytes[1]);
printVarSize(t.AsBytes[1]);
printVar(t.AsBytes[2]);
printVarADDR(t.AsBytes[2]);
printVarSize(t.AsBytes[2]);
printVar(t.AsBytes[3]);
printVarADDR(t.AsBytes[3]);
printVarSize(t.AsBytes[3]);
while (1);
}
Start
t.AsLong=11223344;
ADDR(t.AsLong)=174;
sizeof(t.AsLong)=4;
t.AsBytes[0]=44;
ADDR(t.AsBytes[0])=174;
sizeof(t.AsBytes[0])=1;
t.AsBytes[1]=33;
ADDR(t.AsBytes[1])=175;
sizeof(t.AsBytes[1])=1;
t.AsBytes[2]=22;
ADDR(t.AsBytes[2])=176;
sizeof(t.AsBytes[2])=1;
t.AsBytes[3]=11;
ADDR(t.AsBytes[3])=177;
sizeof(t.AsBytes[3])=1;
Хорошо, какой контроллер, из тех, что на слуху, использует BE?
Не думаю, что ТС када-нить с таким столкнёцца
Микросин пишет что AVR32 на BE - Порядок следования байт (endianness) | dsp | programming
Лично не проверял …
Я вообще не понимаю идею переносимости кода на микропроцессорах ! Не Windows и не Linux же пишем мультиплатформенный. Скорость и компактность кода на выходе - основной принцип для МК
Я еще помню дистрибутив Windows на 4-6 дискетах, что так кардинально изменилось что теперь это 4+ Гб ? Это ~1000 раз на секундочку !!!
Когда (и если) ТС дорастёт до него, он уже будет понимать, какую херню нагородил сейчас. В данный момент, для его говнокода union будет самым правильным решением.
там внутри весь хлам с 1995г для “совместимости”
ЗЫ Хотя, памойму они 16-битную подсистему(от 3.11) в Win7 почикали.
10 ка на P4 вроде не работает, какая нах совместимость с 1995 (это 86 286 386) …
Всё, что есть в ХР, есть в 11.
Это совместимость по железу, а я про программную.
Да, как бы винду не хаяли, а совместимость она тащит за собой с незапамятных времен. В отличии от других ОС.
Это каких? Linux? QNX?
PS А по винде, хотел бы я посмотреть на приложение на Винде на котором два человека смогут набрать и изготовить 15 тысяч проездных билетов к примеру (с персональными данными и фото) за один месяц, с наклейкой фото и ламинацией естественно
Нет.
Если к представлению в виде “uint32_t” НЕ обращатьбся побайтно, а только целиком, то у нас есть ДВЕ сущности - 4 отдельных байта и четырёхбайтовый объект. При хранении и пересылке - объект целиком, язык гарантирует его цельность. При работе - 4 отдельных байта, в каком порядке юнион их пакует в объект - программиста НИКАК НЕ ВОЛНУЕТ.
Старший байт в какой ячейке массива окажется при LE и при BE. У ТС конкретный вопрос был …
Пока пытаюсь сохранять спокойствие…
Ответ на вопрос: “В какой ячейке находится байт”: Не имеет значения, если ты будешь обращаться к нему ТОЛЬКО через юнион.
Еще раз, для доходчивости - НЕ ИМЕЕТ ЗНАЧЕНИЯ.
Я понимаю что вы про несвязанные данные пишите. У ТС другая задача была.
И я и коллеги-профессионалы, про то и пытались сказать, советуя ТС не забивать себе мозг.
ПРО ТО, что нужно изменять постановку задачи! Очень трудно придумать задачу в которой реально необходимо то, о чем спрашивал ТС.
ЗЫ: Не ОФФТОП, но немного в сторону.
Наш ТС - Роман, как человек жадно изучающий новую тему, часто задается абстрактными задачами. Его пытаются вернуть к реальности. Это особенность самообучения, без наставника. Данная тема - характерный пример. При правильной работе с полями задача не имеет смысла.
по мне так главное что парень врубается САМ!, а то что задача бессмысленна, тоже врубится, но позже))
Ну во первых я даже не подумал , что так можно…потом уже подсказали, а во вторых разбирался как работают битовые операции … ну и как правильно здесь указали , по указателю будет зависить от формата числа… В моем случае конечно не имеет значения , т.к порядок байт формирую я сам… . Но с этим вариантом вконце тоже разбирался…