voilà un petit problème que j'essaye de résoudre, j'ai des fichiers
binaires (images) dont je dois faire une inversion de données, en clair
pour chaque mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ...
donnée transformée: 87 65 43 21 0F ED CB A9 ...
j'ai créé le petit bout de code suivant (en m'inspirant d'un sujet de ce
forum^^):
myFile=open("bar.bin","rb")
myString = myFile.read()
myFile.close()
myStringHex=myString.encode('hex')
foo=""
for element2 in range(len(myStringHex)/8):
foo += (myStringHex[element2:element2+8][::-1])
myString2 = foo.decode('hex')
myFileToWrite=open("bar2.bin","wb")
myFileToWrite.write(myString2)
myFileToWrite.close()
Ce bout de code prend énormément de temps (testé sur un fichier 12 mo),
alors qu'avec un logiciel comme winhex le même process est beaucoup plus
rapide, j'ai l'impression de me compliquer la vie pour pas grand-chose,
donc si vous avez une idée sur comment réaliser le même genre d'algo
plus rapidement et dans notre langage préférés, ça serait vraiment sympa.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Laurent Pointal
Le Mon, 31 Mar 2008 17:56:59 +0200, vav a écrit :
Bonjour à tous,
voilà un petit problème que j'essaye de résoudre, j'ai des fichiers binaires (images) dont je dois faire une inversion de données, en clair pour chaque mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ... donnée transformée: 87 65 43 21 0F ED CB A9 ...
j'ai créé le petit bout de code suivant (en m'inspirant d'un sujet de ce forum^^):
myFile=open("bar.bin","rb") myString = myFile.read() myFile.close() myStringHex=myString.encode('hex') foo="" for element2 in range(len(myStringHex)/8): foo += (myStringHex[element2:element2+8][::-1]) myString2 = foo.decode('hex') myFileToWrite=open("bar2.bin","wb") myFileToWrite.write(myString2) myFileToWrite.close()
Ce bout de code prend énormément de temps (testé sur un fichier 12 mo), alors qu'avec un logiciel comme winhex le même process est beaucoup plus rapide, j'ai l'impression de me compliquer la vie pour pas grand-chose, donc si vous avez une idée sur comment réaliser le même genre d'algo plus rapidement et dans notre langage préférés, ça serait vraiment sympa.
Merci d'avance, Vincent
Tu ne peux pas utiliser le module struct avec les spécificateurs de byte- order ?
Avec une chaîne de lecture/décodage du genre "<1024i" et une chaîne d'écriture/encodage du genre ">1024i" (note: j'ai la flegme de regarder si ça correspond bien aux échanges d'octets correspondant à tes besoins).
Ca te fera la jolie boucle de conversion directement dans le code (C j'espère) de struct, et par paquets de 1024 valeurs (tu doit pouvoir augmenter si besoin).
http://docs.python.org/lib/module-struct.html
-- Laurent POINTAL -
Le Mon, 31 Mar 2008 17:56:59 +0200, vav a écrit :
Bonjour à tous,
voilà un petit problème que j'essaye de résoudre, j'ai des fichiers
binaires (images) dont je dois faire une inversion de données, en clair
pour chaque mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ... donnée transformée: 87 65
43 21 0F ED CB A9 ...
j'ai créé le petit bout de code suivant (en m'inspirant d'un sujet de ce
forum^^):
myFile=open("bar.bin","rb")
myString = myFile.read()
myFile.close()
myStringHex=myString.encode('hex')
foo=""
for element2 in range(len(myStringHex)/8):
foo += (myStringHex[element2:element2+8][::-1])
myString2 = foo.decode('hex')
myFileToWrite=open("bar2.bin","wb")
myFileToWrite.write(myString2)
myFileToWrite.close()
Ce bout de code prend énormément de temps (testé sur un fichier 12 mo),
alors qu'avec un logiciel comme winhex le même process est beaucoup plus
rapide, j'ai l'impression de me compliquer la vie pour pas grand-chose,
donc si vous avez une idée sur comment réaliser le même genre d'algo
plus rapidement et dans notre langage préférés, ça serait vraiment
sympa.
Merci d'avance,
Vincent
Tu ne peux pas utiliser le module struct avec les spécificateurs de byte-
order ?
Avec une chaîne de lecture/décodage du genre "<1024i" et une chaîne
d'écriture/encodage du genre ">1024i" (note: j'ai la flegme de regarder
si ça correspond bien aux échanges d'octets correspondant à tes besoins).
Ca te fera la jolie boucle de conversion directement dans le code (C
j'espère) de struct, et par paquets de 1024 valeurs (tu doit pouvoir
augmenter si besoin).
voilà un petit problème que j'essaye de résoudre, j'ai des fichiers binaires (images) dont je dois faire une inversion de données, en clair pour chaque mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ... donnée transformée: 87 65 43 21 0F ED CB A9 ...
j'ai créé le petit bout de code suivant (en m'inspirant d'un sujet de ce forum^^):
myFile=open("bar.bin","rb") myString = myFile.read() myFile.close() myStringHex=myString.encode('hex') foo="" for element2 in range(len(myStringHex)/8): foo += (myStringHex[element2:element2+8][::-1]) myString2 = foo.decode('hex') myFileToWrite=open("bar2.bin","wb") myFileToWrite.write(myString2) myFileToWrite.close()
Ce bout de code prend énormément de temps (testé sur un fichier 12 mo), alors qu'avec un logiciel comme winhex le même process est beaucoup plus rapide, j'ai l'impression de me compliquer la vie pour pas grand-chose, donc si vous avez une idée sur comment réaliser le même genre d'algo plus rapidement et dans notre langage préférés, ça serait vraiment sympa.
Merci d'avance, Vincent
Tu ne peux pas utiliser le module struct avec les spécificateurs de byte- order ?
Avec une chaîne de lecture/décodage du genre "<1024i" et une chaîne d'écriture/encodage du genre ">1024i" (note: j'ai la flegme de regarder si ça correspond bien aux échanges d'octets correspondant à tes besoins).
Ca te fera la jolie boucle de conversion directement dans le code (C j'espère) de struct, et par paquets de 1024 valeurs (tu doit pouvoir augmenter si besoin).
http://docs.python.org/lib/module-struct.html
-- Laurent POINTAL -
Pierre Maurette
Bonjour à tous,
voilà un petit problème que j'essaye de résoudre, j'ai des fichiers binaires (images) dont je dois faire une inversion de données, en clair pour chaque mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ... donnée transformée: 87 65 43 21 0F ED CB A9 ...
Je n'ai pas le temps de regarder le fond de votre question. Mais je suis un peu étonné. Vous faites une ccnversion de boutisme mais avec un "atome" d'un quartet. Êtes-vous certain que vous ne souhaitez pas plutôt: donnée transformée: 78 56 34 12 F0 DE BC 9A ... ?
-- Pierre Maurette
Bonjour à tous,
voilà un petit problème que j'essaye de résoudre, j'ai des fichiers binaires
(images) dont je dois faire une inversion de données, en clair pour chaque
mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ...
donnée transformée: 87 65 43 21 0F ED CB A9 ...
Je n'ai pas le temps de regarder le fond de votre question. Mais je
suis un peu étonné. Vous faites une ccnversion de boutisme mais avec un
"atome" d'un quartet. Êtes-vous certain que vous ne souhaitez pas
plutôt:
donnée transformée: 78 56 34 12 F0 DE BC 9A ...
?
voilà un petit problème que j'essaye de résoudre, j'ai des fichiers binaires (images) dont je dois faire une inversion de données, en clair pour chaque mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ... donnée transformée: 87 65 43 21 0F ED CB A9 ...
Je n'ai pas le temps de regarder le fond de votre question. Mais je suis un peu étonné. Vous faites une ccnversion de boutisme mais avec un "atome" d'un quartet. Êtes-vous certain que vous ne souhaitez pas plutôt: donnée transformée: 78 56 34 12 F0 DE BC 9A ... ?
-- Pierre Maurette
Pierre Maurette
Bonjour à tous,
voilà un petit problème que j'essaye de résoudre, j'ai des fichiers binaires (images) dont je dois faire une inversion de données, en clair pour chaque mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ... donnée transformée: 87 65 43 21 0F ED CB A9 ...
j'ai créé le petit bout de code suivant (en m'inspirant d'un sujet de ce forum^^):
myFile=open("bar.bin","rb") myString = myFile.read() myFile.close() myStringHex=myString.encode('hex') foo="" for element2 in range(len(myStringHex)/8): foo += (myStringHex[element2:element2+8][::-1]) myString2 = foo.decode('hex') myFileToWrite=open("bar2.bin","wb") myFileToWrite.write(myString2) myFileToWrite.close()
Ce bout de code prend énormément de temps (testé sur un fichier 12 mo), alors qu'avec un logiciel comme winhex le même process est beaucoup plus rapide, j'ai l'impression de me compliquer la vie pour pas grand-chose, donc si vous avez une idée sur comment réaliser le même genre d'algo plus rapidement et dans notre langage préférés, ça serait vraiment sympa.
Je n'ai pas l'impression que votre code fournisse ce que vous voulez, si on dépasse les premiers octets. Si comme suggéré dans mon autre message c'est une inversion sur la base de l'octet que vous voulez, il me semble que ça fontionne:
s=open("tst.bin","rb").read() f=open("tst2.bin","wb") for i in range(0, len(s), 4): [f.write(s[i + j]) for j in (3, 2, 1, 0)]
-- Pierre Maurette
Bonjour à tous,
voilà un petit problème que j'essaye de résoudre, j'ai des fichiers binaires
(images) dont je dois faire une inversion de données, en clair pour chaque
mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ...
donnée transformée: 87 65 43 21 0F ED CB A9 ...
j'ai créé le petit bout de code suivant (en m'inspirant d'un sujet de ce
forum^^):
myFile=open("bar.bin","rb")
myString = myFile.read()
myFile.close()
myStringHex=myString.encode('hex')
foo=""
for element2 in range(len(myStringHex)/8):
foo += (myStringHex[element2:element2+8][::-1])
myString2 = foo.decode('hex')
myFileToWrite=open("bar2.bin","wb")
myFileToWrite.write(myString2)
myFileToWrite.close()
Ce bout de code prend énormément de temps (testé sur un fichier 12 mo), alors
qu'avec un logiciel comme winhex le même process est beaucoup plus rapide,
j'ai l'impression de me compliquer la vie pour pas grand-chose, donc si vous
avez une idée sur comment réaliser le même genre d'algo plus rapidement et
dans notre langage préférés, ça serait vraiment sympa.
Je n'ai pas l'impression que votre code fournisse ce que vous voulez,
si on dépasse les premiers octets.
Si comme suggéré dans mon autre message c'est une inversion sur la base
de l'octet que vous voulez, il me semble que ça fontionne:
s=open("tst.bin","rb").read()
f=open("tst2.bin","wb")
for i in range(0, len(s), 4):
[f.write(s[i + j]) for j in (3, 2, 1, 0)]
voilà un petit problème que j'essaye de résoudre, j'ai des fichiers binaires (images) dont je dois faire une inversion de données, en clair pour chaque mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ... donnée transformée: 87 65 43 21 0F ED CB A9 ...
j'ai créé le petit bout de code suivant (en m'inspirant d'un sujet de ce forum^^):
myFile=open("bar.bin","rb") myString = myFile.read() myFile.close() myStringHex=myString.encode('hex') foo="" for element2 in range(len(myStringHex)/8): foo += (myStringHex[element2:element2+8][::-1]) myString2 = foo.decode('hex') myFileToWrite=open("bar2.bin","wb") myFileToWrite.write(myString2) myFileToWrite.close()
Ce bout de code prend énormément de temps (testé sur un fichier 12 mo), alors qu'avec un logiciel comme winhex le même process est beaucoup plus rapide, j'ai l'impression de me compliquer la vie pour pas grand-chose, donc si vous avez une idée sur comment réaliser le même genre d'algo plus rapidement et dans notre langage préférés, ça serait vraiment sympa.
Je n'ai pas l'impression que votre code fournisse ce que vous voulez, si on dépasse les premiers octets. Si comme suggéré dans mon autre message c'est une inversion sur la base de l'octet que vous voulez, il me semble que ça fontionne:
s=open("tst.bin","rb").read() f=open("tst2.bin","wb") for i in range(0, len(s), 4): [f.write(s[i + j]) for j in (3, 2, 1, 0)]
-- Pierre Maurette
vav
Bonjour à tous,
voilà un petit problème que j'essaye de résoudre, j'ai des fichiers binaires (images) dont je dois faire une inversion de données, en clair pour chaque mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ... donnée transformée: 87 65 43 21 0F ED CB A9 ...
Je n'ai pas le temps de regarder le fond de votre question. Mais je suis un peu étonné. Vous faites une ccnversion de boutisme mais avec un "atome" d'un quartet. Êtes-vous certain que vous ne souhaitez pas plutôt: donnée transformée: 78 56 34 12 F0 DE BC 9A ... ?
Bonjour merci pour les réponses, c'est effectivement une transformation
du style suivant qui doit être effectué: 78 56 34 12 F0 DE BC 9A ...
Je vais explorer la piste du module « struct » pour voir ce que je peu faire.
Merci, Vincent
Bonjour à tous,
voilà un petit problème que j'essaye de résoudre, j'ai des fichiers
binaires (images) dont je dois faire une inversion de données, en
clair pour chaque mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ...
donnée transformée: 87 65 43 21 0F ED CB A9 ...
Je n'ai pas le temps de regarder le fond de votre question. Mais je suis
un peu étonné. Vous faites une ccnversion de boutisme mais avec un
"atome" d'un quartet. Êtes-vous certain que vous ne souhaitez pas plutôt:
donnée transformée: 78 56 34 12 F0 DE BC 9A ...
?
Bonjour merci pour les réponses, c'est effectivement une transformation
du style suivant qui doit être effectué:
78 56 34 12 F0 DE BC 9A ...
Je vais explorer la piste du module « struct » pour voir ce que je peu
faire.
voilà un petit problème que j'essaye de résoudre, j'ai des fichiers binaires (images) dont je dois faire une inversion de données, en clair pour chaque mot de 32 bits je dois faire l'opération suivante :
donnée initiale: 12 34 56 78 9A BC DE F0 ... donnée transformée: 87 65 43 21 0F ED CB A9 ...
Je n'ai pas le temps de regarder le fond de votre question. Mais je suis un peu étonné. Vous faites une ccnversion de boutisme mais avec un "atome" d'un quartet. Êtes-vous certain que vous ne souhaitez pas plutôt: donnée transformée: 78 56 34 12 F0 DE BC 9A ... ?
Bonjour merci pour les réponses, c'est effectivement une transformation
du style suivant qui doit être effectué: 78 56 34 12 F0 DE BC 9A ...
Je vais explorer la piste du module « struct » pour voir ce que je peu faire.