Как скопировать unsigned long long в массив байтов в С++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как скопировать unsigned long long в массив байтов в С++?

Сообщение Anonymous »

Итак, вот код:

Код: Выделить всё

int thread = blockIdx.x * blockDim.x + threadIdx.x + 0xeafe7436;
uchar m[12];
uint res[4];
m[0] = (uchar)(thread & 0x000000ff);
m[1] = (uchar)((thread >> 8) & 0x000000ff);
m[2] = (uchar)((thread >> 16) & 0x000000ff);
m[3] = (uchar)((thread >> 24) & 0x000000ff);

for (unsigned long long i = 0; i < 0xffffffffffffffff; i++) {
m[4] = (uchar)(i & 0x00000000000000ff);
m[5] = (uchar)((i >> 8) & 0x00000000000000ff);
m[6] = (uchar)((i >> 16) & 0x00000000000000ff);
m[7] = (uchar)((i >> 24) & 0x00000000000000ff);
m[8] = (uchar)((i >> 32) & 0x00000000000000ff);
m[9] = (uchar)((i >> 40) & 0x00000000000000ff);
m[10] = (uchar)((i >> 48) & 0x00000000000000ff);
m[11] = (uchar)((i >> 56) & 0x00000000000000ff);
md5(m, 12, res);
}
Я думаю, что операции сдвига и побитовые операции делают мой код медленнее, чем должно быть, поэтому я хотел попробовать использовать memcpy, чтобы проверить, будет ли это быстрее.
p>
Я хочу скопировать значение i в m, начиная с индекса 4. Как мне это сделать с помощью memcpy? Я изучил другие вопросы, но нашел их запутанными и трудными для понимания, и не смог сделать это сам.
РЕДАКТИРОВАТЬ: я протестировал приведенный выше код в контексте другого кода, и это так. быстрый. Но я хотел использовать memcpy, чтобы также проверить скорость этого процесса. Поэтому вместо того, чтобы устанавливать каждый байт массива байтов m индивидуально, я хочу сделать это за ОДНУ операцию, используя memcpy. Поэтому скопируйте значение i в m, чтобы каждый байт m с индексом от 4 до 11 соответствовал байту из i. i — это беззнаковый длинный размер, равный восьми байтам. Итак, скопируйте каждый байт из i в m, чтобы m[4] = первый байт i, m[5] = второй байт i и т. д. и т. д. Полагаю, эта цель сформулирована довольно хорошо. .

Подробнее здесь: https://stackoverflow.com/questions/792 ... array-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»