помогите сделать без 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;
Должно сработать.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть необходимость запустить аппаратный (желательно) SPI в режиме slave на ESP12f (ESP8266)SPI0 используется для доступа к флешке - его не трогаем
Как узнать имя интернет сети к которой подключен компПодключен ли интернет проверяю так:
Создал сервер под Tomcat, задача которого помещать определенные xml в очередь сообщенийВыбор xml'я реализовал в соответствующем классе в зависимости...
Как отрендерить картинку используя LWJGL, STB Image?