Hola, gracias a todos por sus respuestas, he probado las opciones que entendí, la única que me permitió avanzar fue la de vosk. Los unos los interpreta como 49s, entonces hice la resta para que quedase 1, el problema es que, al hacer la operacion, no debe interpretarlo bien. Si la tarjeta sanitaria es 1111. Recoje las Ns correctamente, pero al entrar en el for, en el caso anterior el resultado da 9 y el siguiente 8 :S. Aquí el código hasta ahora:
Código C:
Ver originalvoid iniciosesion(int *id, char tsanitaria[],int longitudtsanitaria){
int i=0, fid=0,n;
for(i=0;i<longitudtsanitaria;i++){
n=(int)tsanitaria[i] - 48; // también probé a restarle '0'
fid+=((n)*10)^(longitudtsanitaria-(i+1));
}
*id=fid;
}