Prima cosa devi creare una maschera con i k bit meno significativi con valore 1 ed il resto a 0
La maschera l'ha creata. sbaglia a crearsi il buffer.
Forse con l'array di char intendeva fare una roba tipo:
unsigned short estrai_bit_meno_sign(unsigned short n, unsigned short k,unsigned char bit[n_len])
{
unsigned short mask=~((~0u)<<k);
unsigned short bit_value;
int i,j;
i=n_len;
if (k > sizeof(unsigned short)*8)
{
fprintf (stderr, "Err!!!\n");
return 0;
}
bit_value=n & mask;
// Ora si forma il buff ma....
// x comodità di visualizzazione includiamo il \0 terminale
// Se non necessario remmare la riga sotto. Se necessaria uno short da 16 bit necessita 17 chars
bit[--i]='\0';
//
for (--i,j=0;i>=0;j++,i--)
bit[i]=(bit_value & (1<<j)) ? '1' : '0';
return bit_value;
}