char *decode(char *data, size_t len) { unsigned int i, dp; unsigned short tmp; unsigned char *dest; unsigned char *data8; data8 = (unsigned char *)data; dest = malloc(len); if(!dest) { return NULL; } dp = 0; for(i = 0; i < len; i += 2) { tmp = data8[i] | (data8[i + 1] << 8); tmp = (tmp >> 0x1) | ((tmp & 0x1) << 0xf); dest[dp++] = (tmp & 0xff00) >> 8; dest[dp++] = tmp & 0xff; } return (char *)dest; }