#include <stdio.h>
void display ( const void *buffer, size_t size )
{
const unsigned char *byte = buffer;
while ( size-- )
{
printf ( "%X ", *byte++ );
}
putchar ( '\n' );
}
void *reverse ( void *buffer, size_t size )
{
unsigned char *start, *end;
#ifndef NDEBUG
printf("reverse: size = %lu\n", (long unsigned)size);
#endif
for ( start = buffer, end = start + (size - 1); start < end; ++start, --end )
{
unsigned char swap = *start;
*start = *end;
*end = swap;
#ifndef NDEBUG
printf("start = %p, end = %p\n", (void*)start, (void*)end);
#endif
}
return buffer;
}
void * ReverseBytes(void * buffer, size_t length)
{
register unsigned char temp, * p, * e;
#ifndef NDEBUG
printf("ReverseBytes: size = %lu\n", (long unsigned)length);
#endif
if ( length )
{
for ( p = buffer, e = p + (length - 1); p != e; ++p, e-- )
{
temp = *p;
*p = *e;
*e = temp;
#ifndef NDEBUG
printf("p = %p, e = %p\n", (void*)p, (void*)e);
if ( e < buffer )
{
puts("do you see the issue yet?\nwhat if this were not here?");
break;
}
#endif
}
}
return buffer;
}
int main ( void )
{
unsigned char odd[] = {0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE};
unsigned char even[] = {0x12,0x34,0x56,0x78,0x9A,0xBC};
puts("odd:");
display ( odd, sizeof odd );
display ( reverse ( odd, sizeof odd ), sizeof odd );
display ( ReverseBytes ( odd, sizeof odd ), sizeof odd );
puts("\neven:");
display ( even, sizeof even );
display ( reverse ( even, sizeof even ), sizeof even );
display ( ReverseBytes ( even, sizeof even ), sizeof even );
return 0;
}
/* my output
odd:
12 34 56 78 9A BC DE
reverse: size = 7
start = 0012FF84, end = 0012FF8A
start = 0012FF85, end = 0012FF89
start = 0012FF86, end = 0012FF88
DE BC 9A 78 56 34 12
ReverseBytes: size = 7
p = 0012FF84, e = 0012FF8A
p = 0012FF85, e = 0012FF89
p = 0012FF86, e = 0012FF88
12 34 56 78 9A BC DE
even:
12 34 56 78 9A BC
reverse: size = 6
start = 0012FF7C, end = 0012FF81
start = 0012FF7D, end = 0012FF80
start = 0012FF7E, end = 0012FF7F
BC 9A 78 56 34 12
ReverseBytes: size = 6
p = 0012FF7C, e = 0012FF81
p = 0012FF7D, e = 0012FF80
p = 0012FF7E, e = 0012FF7F
p = 0012FF7F, e = 0012FF7E
p = 0012FF80, e = 0012FF7D
p = 0012FF81, e = 0012FF7C
p = 0012FF82, e = 0012FF7B
do you see the issue yet?
what if this were not here?
BC 9A 78 56 34 12
*/