Я пытаюсь пройти через массив uint64_t
ie:
const uint64_t data[] =
{
0x0000000000000000,
0x1111111111111111,
0x2322323232323232
}
Из этого я хотел бы пройтись по каждому индексу в массиве и по каждому индексу, распечатать значение каждого байта. Я думаю, что это можно сделать с помощью битовой маски, но я не могу понять это правильно... Пока у меня есть это:
static const int indices = sizeof(data) / sizeof(uint64_t);
uint64_t mask;
for(int i= 0; i < indices; i++)
{
mask = 0xff;
for(int byte = 0; byte < 8; byte++)
{
printf("index[%d], byte[%d]: 0x%02x\n", i, byte, data | mask);
mask = mask << 8;
printf("mask: 0x%016lx\n", mask);
}
}
Мой вывод соответствует ожиданиям для маски. Он сдвигает 8 бит (1 байт) в каждом цикле. Однако побитовое сравнение данных глупо. Побитовое И, кажется, работает правильно, однако формат не работает. Я ищу операторы печати, которые просто содержат значение байта, а не значение uint64_t, как сейчас. Я думаю, что наличие маски в виде uin64_t мешает печати однобайтового значения, но я не уверен, как это исправить. Я получаю такой отзыв: data[1] byte[1]: 0x1100, но хочу получить свои данные в виде: data[1] byte[1]: 0x11
C
к вашему вопросу, так как похоже, что вы используете C (который я не использовал около 10 лет... Сейчас я уйду). - person Tim Biegeleisen   schedule 12.07.2016