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.
dépend de la façon dont les données sont présentées dans 'buf'. – Nim
Cela dépend beaucoup de la façon dont il a été rempli. Un 'int ** buf' n'indique pas directement un flux de texte. –
sscanf, mais vous devez convertir le tableau d'octets en tableau de char. – BigMike