Since
(CXC')ik = CijXjkC'kl = CijXjkClk
I would do this way:
int C[]={1,1,1,1,1,-2,2,1,1,1,-1,-1,1,1,-1,-1};
#define I(i,j) (i)*4+(j)
void transform(int * btr)
{
int tmp[16]; memcpy(tmp,btr, 16*sizeof(int));
int i,j,k,l;
for (i=0; i<4; i++)
for (l=0; l<4; l++)
{
btr[I(i,l)] = 0;
for (j=0; j<4; j++)
for (k=0; k<4; k++)
btr[I(i,l)] += C[I(i,j)] * tmp[I(j,k)] * C[I(l,k)];
}
}
int main()
{
int X[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
transform(X);
}