2012-03-21 2 views
1

Le code C i besoin de convertir en Java est:Conversion du code C pour le code Java: sscanf

typedef struct 
{ 
    short ih; 
    .... 
} lsettings; 

int ldc_read_parameters(char *param_fnm, lsettings settings, short *image_height) 
{ 
    FILE *fp_param; 
    char line[256]; 
    fp_param = fopen(param_fnm, "r"); 

    if (fp_param) 
    { 
     do fgets(line, 256, fp_param); 
     while (line[0] == '#'); 

     sscanf(line, "%hd", &settings.ih); 
     *image_height = settings.ih; 
    } 
} 

Le code Java j'ai écrit est:

class lsettings 
{ 
    public short ih; 
    ..... 
} 

int ldc_read_parameters(String param_fnm, lsettings settings, short image_height[]) 
{ 
    Scanner fp_param;   
    String line; 
    fp_param = new Scanner(new BufferedReader(new FileReader(param_fnm))); 
    if (fp_param.hasNext()) 
    { 

     do 
     { 
      line=fp_param.nextLine(); 

     } while (line.charAt(0) == '#'); 
     Scanner s=new Scanner(line); 
     settings.ih=s.nextShort(); 
     image_height[0] = settings.ih; 
    } 
} 

Ai-je fait correctement la conversion ou quelque chose ne va pas ici. Je ne suis pas sûr de la fonction sscanf. S'il vous plaît aider. Merci.

+1

Que diriez-vous juste de l'essayer? – Joey

+0

Quelle erreur voyez-vous lorsque vous l'essayez? Avez-vous essayé de passer le code dans un débogueur? –

Répondre

1

homme sscanf

The scanf() function reads input from the standard input stream stdin, fscanf() reads input from the stream pointer stream, and sscanf() reads its input from the character string pointed to by str.

h Indicates that the conversion will be one of d, i, o, u, x, X, or n and the next pointer is a pointer to a short int or unsigned short int (rather than int).

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#nextShort()

Les deux sscanf et nextShort convertit la valeur à côté court (en version c que vous avez court non signé). Si vous voulez avoir la même précision, changez pour int. Bref en java toujours signé.

+0

IMHO '% hd' se réfère à court int qui est signé. Ou ai-je raté quelque chose? –

+0

'ou short non intigned - cela dépend de vous si vous entrez' sscanf (ligne, "% hd", & variable); 'variable peut être signée ou non signée courte. En Java court est toujours signé (char est non signé, mais je ne sais pas comment Scanner l'interpréter) –

+0

Mais dans 'struct lsettings' il a été défini comme' short' –