помогите сделать без memcpy то же самое:
char in[10] = {0};
int value = 13415;
memcpy(in, &value, sizeof(value));
Вариант с переинтерпретацией массива char [10] как lvalue типа int при помощи каста ((int &) in = value; и т.п.) - это грубое нарушение strict aliasing и неопределенное поведение в обоих языках, как уже было сказано в комментариях. Поэтому тут либо memcpy, либо его рукописный аналог.
Есть еще вариант, который делает почти то же самое, без memcpy
union { char in[10]; int value; } u = { 0 };
u.value = 12345;
после чего сразу смотрим в u.in и видим там результат.
Проблема, однако, в том, что использовать union таким способом формально разрешено именно в С, но не в С++. Но на это еще можно закрыть глаза. А вот на (int &) in = value; закрыть глаза нельзя.
Используйте цикл:
char in[10] = {0};
int value = 13415;
for (size_t i = 0; i < sizeof value; i++)
in[i] = ((char*)&value)[i];
Но если есть возможность, просто возьмите memcpy(). Цикл ничем не лучше, а если включите оптимизацию, то и цикл, и memcpy() все равно превратятся в одно и то же.
В соседнем ответе предлагают (*(int*)(in))=value; (он же (int&)in = value;), но это нарушает strict aliasing и приводит к неопределенному поведению. Так лучше не делать.
Можно со сдвигами поизвращаться
int value = 13415;
char in[10] = { value, value >> 8, value >> 16, value >> 24 };
(*(int*)(in))=value;
Должно сработать.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей