Алексей1153++, боюсь ты не понял задачи
Vitalya25, а боюсь не в курсе, как устроена память и как в ней размещаются элементы
Как сделать так, чтобы из числа 1B56DFEC:
1B записало в первую ячейку,
56 во вторую,
DF - в третью,
а EC соответственно в четвертую.
тебя именно такой порядок интересует или устроит и обратный?
дело в том, что число 1B56DFEC и так лежит в 4-х смежных ячейках и если тебе не нужно менять порядок байт(в большинстве случае это именно так), то достаточно просто скопировать число поверх массива, а можно не копировать, а интерпретировать число, как массив из четырёх байт.
int main(int argc, char* argv[])
{
{ // интерпритеруем long, как массив char
std::cout << "interpret\t";
long l = 458678252;
unsigned char * c = reinterpret_cast<unsigned char*>(&l);
for (size_t i = 0; i != 4; ++i)
std::cout << std::hex << static_cast<long>(c[i]) << " ";
}
std::cout << std::endl;
{ // меняем порядок байт в цикле
std::cout << "loop reorder\t";
long l = 458678252;
unsigned char c[4] = {0};
unsigned char * c2 = reinterpret_cast<unsigned char*>(&l);
for (size_t i = 0; i != 4; ++i)
c[i] = c2[3-i];
for (size_t i = 0; i != 4; ++i)
std::cout << std::hex << static_cast<long>(c[i]) << " ";
}
std::cout << std::endl;
{ // копируем через оператор =
std::cout << "operator=\t";
long l = 458678252;
unsigned char c[4] = {0};
*reinterpret_cast<long*>(c) = l;
for (size_t i = 0; i != 4; ++i)
std::cout << std::hex << static_cast<long>(c[i]) << " ";
}
std::cout << std::endl;
{ // копируем через memcpy
std::cout << "memcpy\t\t";
long l = 458678252;
unsigned char c[4] = {0};
memcpy(c, &l, 4);
*reinterpret_cast<long*>(c) = l;
for (size_t i = 0; i != 4; ++i)
std::cout << std::hex << static_cast<long>(c[i]) << " ";
}
std::cout << std::endl;
{ // меняем порядок байт сдвигом
std::cout << "shift reorder\t";
long l = 458678252;
unsigned char c[4] = {0};
c[3] = (BYTE)l;
l = l>>8;
c[2] = (BYTE)l;
l = l>>8;
c[1] = (BYTE)l;
l = l>>8;
c[0] = (BYTE)l;
for (size_t i = 0; i != 4; ++i)
std::cout << std::hex << static_cast<long>(c[i]) << " ";
}
return 0;
}
результаты:
interpret ec df 56 1b
loop reorder 1b 56 df ec
operator= ec df 56 1b
memcpy ec df 56 1b
shift reorder 1b 56 df ec