LINUX.ORG.RU

Не могу написать двоичный дамп для x86


0

0

const unsigned char bits[]={1,2,4,8,16,32,64,128};
const char nbits=8;

void dump(const void* pobject,int size)
{
int i,j;
for(i=0;i<size;i++) {
for(j=nbits-1;j>=0;j--) {
if(((char *)pobject)[j] & bits[j])
printf("%c",'1');
else
printf("%c",'0');
}
if(i<size-1)
printf("%c",'|');
}
printf("\n");
}

...

unsigned int i;
for(i=0;i<10;i++)
dump((void *)(&i),sizeof(i));

выдает:

00000000|00000000|00000000|00000000
00000001|00000001|00000001|00000001
00000000|00000000|00000000|00000000
00000001|00000001|00000001|00000001
00000000|00000000|00000000|00000000
00000001|00000001|00000001|00000001
00000000|00000000|00000000|00000000
00000001|00000001|00000001|00000001
00000000|00000000|00000000|00000000
00000001|00000001|00000001|00000001

Почему?

anonymous

Извините за форматирование. Не знаю как тут отступы сделать.

anonymous
()

Не взирая на общую бредовость всей идеи, взглянем на эту строку:
>if(((char *)pobject)[j] & bits[j]) 
                      ^, должно быть i

PS 2 = 2 << 0, 4 = 2 << 1, 8 = 2 << 2 и т.д

phoenix ★★★★
()

потому что у тебя

> if(((char *)pobject)[j] & bits[j])

а надо

if(((char *)pobject)[i] & bits[j])

у pobject не j а i должно быть.

hateful_dead
()
Ответ на: комментарий от phoenix

блин. отправил сообщение и тут же увидел, что до меня уже ответили...

hateful_dead
()

а просто printf("1") и т.д. написать - религия не позволяет ?

kitov ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.