Merci à PBOS aide et son programme (publié here, pour XOR un grand fichier), je fis quelques tests et je vois que j'ai un autre problème: après avoir changé le masque par un autre de 128 bits , il n'y a pas de type par défaut aussi grand que nécessaire.erreur de type 128 bits
Je pense qu'une solution peut être d'inclure une bibliothèque pour augmenter les types entiers disponibles ... mais que je préfère interpréter chaque valeur 128 bits tels que des chaînes. Est-ce possible sans perdre de performance?
Voici le programme en cours (avec le bug « constante entière est trop grand pour son type »):
#include <stdio.h>
#include <stdlib.h>
#define BLOCKSIZE 128
#define MASK 0xA37c54f173f02889a64be02f2bc44112 /* a 128 bits constant */
void
usage(const char *cmd)
{
fprintf(stderr, "Usage: %s <in-file> [<out-file>]\n", cmd);
exit (EXIT_FAILURE);
}
int
main(int argc, char *argv[])
{
if (argc < 3) usage(argv[0]);
FILE *in = fopen(argv[1], "rb");
if (in == NULL)
{
printf("Cannot open: %s", argv[2]);
return EXIT_FAILURE;
}
FILE *out = fopen(argv[2], "wb");
if (out == NULL)
{
fclose(in);
printf("Unable to open '%s' for writing.", argv[2]);
}
char buffer[BLOCKSIZE];
int count;
while (count = fread(buffer, 1, BLOCKSIZE, in))
{
int i;
for (i = 0; i < count; i++)
{
((unsigned long *)buffer)[i] ^= MASK; /* this line is bugged */
}
if (fwrite(buffer, 1, count, out) != count)
{
fclose(in);
fclose(out);
printf("Cannot write, disk full?\n");
return EXIT_FAILURE;
}
}
fclose(in);
fclose(out);
return EXIT_SUCCESS;
}
Merci pour toute suggestion.
Doug
Êtes-vous sûr que 'mask [i]' fonctionnera pour 'count/sizeof (int)'? – Groo
@Groo - vous avez attrapé un bug, je vais mettre à jour mon exemple. –