>>61754011
Depends on how many bytes do you want to interleave. CPU cores usually don't allow you to use a quick way to do it unless they have built-in dedicated interleavers using CPU registers.
But if is 2 bytes you can try with an array.
void interleave(byte* input, byte* output)
{
const byte ntable[] = {
0b00000000,
0b00000001,
0b00000100,
0b00000101,
0b00010000,
0b00010001,
0b00010100,
0b00010101,
0b01000000,
0b01000001,
0b01000100,
0b01000101,
0b01010000,
0b01010001,
0b01010100,
0b01010101
};
byte nibble[4];
nibble[0] = input[0] & 0x0f;
nibble[1] = input[0] >> 4;
nibble[2] = input[1] & 0x0f;
nibble[3] = input[1] >> 4;
output[0] = (ntable[nibble[1]] << 1) | ntable[nibble[0]];
output[1] = (ntable[nibble[3]] << 1) | ntable[nibble[2]];
}