#include <stdio.h>
#include <limits.h>
#if CHAR_BIT != 8
#error char is expected to be 8 bits
#endif
unsigned char RevByte(unsigned char b)
{
static const unsigned char t[16] =
{
0x0, 0x8, 0x4, 0xC, 0x2, 0xA, 0x6, 0xE,
0x1, 0x9, 0x5, 0xD, 0x3, 0xB, 0x7, 0xF
};
return t[(b >> 4)] | (t[b&0xF] << 4);
}
void RevBytes(unsigned char* b, size_t c)
{
size_t i;
for (i = 0; i < c / 2; i++)
{
unsigned char t = b[i];
b[i] = RevByte(b[c - 1 - i]);
b[c - 1 - i] = RevByte(t);
}
if (c & 1)
b[c / 2] = RevByte(b[c / 2]);
}
int main(void)
{
int i;
unsigned char buf[16] =
{
0x0, 0x8, 0x4, 0xC, 0x2, 0xA, 0x6, 0xE,
0x1, 0x9, 0x5, 0xD, 0x3, 0xB, 0x7, 0xF
};
RevBytes(buf, 16);
for (i = 0; i < 16; i++)
return 0;
}
ICAgICNpbmNsdWRlIDxzdGRpby5oPgogICAgI2luY2x1ZGUgPGxpbWl0cy5oPgogICAgCiAgICAjaWYgQ0hBUl9CSVQgIT0gOAogICAgI2Vycm9yIGNoYXIgaXMgZXhwZWN0ZWQgdG8gYmUgOCBiaXRzCiAgICAjZW5kaWYKICAgIAogICAgdW5zaWduZWQgY2hhciBSZXZCeXRlKHVuc2lnbmVkIGNoYXIgYikKICAgIHsKICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgdFsxNl0gPQogICAgICB7CiAgICAgICAgMHgwLCAweDgsIDB4NCwgMHhDLCAweDIsIDB4QSwgMHg2LCAweEUsCiAgICAgICAgMHgxLCAweDksIDB4NSwgMHhELCAweDMsIDB4QiwgMHg3LCAweEYKICAgICAgfTsKICAgICAgcmV0dXJuIHRbKGIgPj4gNCldIHwgKHRbYiYweEZdIDw8IDQpOwogICAgfQogICAgCiAgICB2b2lkIFJldkJ5dGVzKHVuc2lnbmVkIGNoYXIqIGIsIHNpemVfdCBjKQogICAgewogICAgICBzaXplX3QgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGMgLyAyOyBpKyspCiAgICAgIHsKICAgICAgICB1bnNpZ25lZCBjaGFyIHQgPSBiW2ldOwogICAgICAgIGJbaV0gPSBSZXZCeXRlKGJbYyAtIDEgLSBpXSk7CiAgICAgICAgYltjIC0gMSAtIGldID0gUmV2Qnl0ZSh0KTsKICAgICAgfQogICAgICBpZiAoYyAmIDEpCiAgICAgICAgYltjIC8gMl0gPSBSZXZCeXRlKGJbYyAvIDJdKTsKICAgIH0KICAgIAogICAgaW50IG1haW4odm9pZCkKICAgIHsKICAgICAgaW50IGk7CiAgICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XSA9IAogICAgICB7CiAgICAgICAgMHgwLCAweDgsIDB4NCwgMHhDLCAweDIsIDB4QSwgMHg2LCAweEUsCiAgICAgICAgMHgxLCAweDksIDB4NSwgMHhELCAweDMsIDB4QiwgMHg3LCAweEYKICAgICAgfTsKICAgIAogICAgICBSZXZCeXRlcyhidWYsIDE2KTsKICAgIAogICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKICAgICAgICBwcmludGYoIjB4JTAyWCAiLCBidWZbaV0pOwogICAgICBwdXRzKCIiKTsKICAgIAogICAgICByZXR1cm4gMDsKICAgIH0K