I have the following xor-shift encoder

```
char a[] = "text";
int b = strlen(a);
for (int c = 0; c < b; c++) {
    if (c > 0) a[c] ^= a[c-1];
    a[c] ^= a[c] >> 3;
    a[c] ^= a[c] >> 2;
    a[c] ^= a[c] >> 1;
    printf("%02x", (unsigned int)(a[c]));
}

```

I'd like to revert the hex output to the original string. 

Is it even possible, considering that the shift would in some cases eliminate bits on the right side that can't be retrieved anymore? And if it is possible, how could the operations be reverted?