2011-10-20 10 views
0

Je travaille avec un matériel fermé et je veux charger un fichier texte. Je n'ai que la fonction suivante pour accéder à la mémoire secondaire:scanf à partir du tampon de données en C/C++

bool load_file(const char *filename, int **buf, int *size) 

Cela signifie que je finirais avec toutes les données de BUF et la taille en taille. Comment puis-je extraire des chaînes, des entiers ou des données flottantes? Je voudrais le faire dans un semblable similaire à l'utilisation de scanf.

Merci.

+0

dépend de la façon dont les données sont présentées dans 'buf'. – Nim

+3

Cela dépend beaucoup de la façon dont il a été rempli. Un 'int ** buf' n'indique pas directement un flux de texte. –

+1

sscanf, mais vous devez convertir le tableau d'octets en tableau de char. – BigMike

Répondre

4

Vous pouvez utiliser sscanf pour numériser des blocs de mémoire au lieu de fichiers, de la même façon que vous pouvez utiliser sprintf à printf en mémoire. Le prototype est:

int sscanf (const char *str, const char *format, ...); 

En d'autres termes, le même que scanf mais avec un pointeur ajouté.

Cela permet de transformer les données de caractères en d'autres types. Si vous avez données premières dans ce tampon de mémoire, vous pouvez convertir et référencer.

En d'autres termes, que vous avez un tampon de mémoire avec un entier commençant à la cinquième position (offset 4), quelque chose comme:

#include <stdio.h> 
int main(void) { 
    //    +--------------+--> little-endian, 
    //    |    |  32-bit = 42. 
    char xyz[] = "1234\x2a\x00\x00\x00"; 
    int x = *((int*)(xyz+4)); 
    printf ("%d\n", x); 
    return 0; 
} 

En supposant l'encodage entier sont les mêmes que le mien, cette commande affiche 42 (hex 2A). En prenant cette expression à part un bit à la fois:

 
     (xyz+4) : Get the address four unit past xyz. Since xyz is a char 
        pointer, this means four bytes. 
    (int*)(xyz+4) : Cast it into an int pointer. 
*((int*)(xyz+4)) : De-reference that to get the int at that address. 
Questions connexes