The array is already bytes, either declared BYTE or unsigned char.
The problem with C is aside from port pin bits or their latch registers which appear to be specially accounted for,
you still need to apply a mask to bytes to change one bit, or look/ test for a bit.
Something like asm “shift right with carry” does not seem to exist unless you went back to inline assembler in the C.
But I still think in every case the dsPic still wins because it’s running so much faster than the 20MHz/4 that I’m used to.

I’ve run into this way before now... C does suck at that.

Apologies, I wanted the picture to be interesting, but not thrown off YouTube.
You can see a large patch of the same colour because it’s a block cipher.
I had to apply a huge Xor mask to every image before hand to cover that.