![]() |
Litlle-Endian? - Version imprimable +- N-PN White-Hat Project (https://dev.n-pn.fr/forum) +-- Forum : Questions (https://dev.n-pn.fr/forum/forumdisplay.php?fid=11) +--- Forum : Chiffrement / Déchiffrement / Stéganographie (https://dev.n-pn.fr/forum/forumdisplay.php?fid=26) +--- Sujet : Litlle-Endian? (/showthread.php?tid=2588) |
Litlle-Endian? - gr4ph0s - 04-01-2013 Salut tout le monde je recherche en effet le moyen de passer du nombre de droite au nombre de gauche et inversement ^^ Donc voici la liste : [spoiler] Code : 1 8 Suite au conseil de Ark sur IRC j'ai donc pensé que c'étais qu'une simple histoire de litlle-endian(qui en sois n'est pas sorcier) Mais c'est la que viens mon problème... Pour 1 et 8 pas de problème => 8 en binaire = 10 00 donc sa donne 00 01 en litlle endian donc 1 Pour 2 et 64 la non plus => 64 en binaire = 01 00 00 00 donc sa donne 00 00 00 10 en litlle endian donc 2 Mais par contre pour 3 et 72... si je suis la même méthode 72 en binaire = 01 00 10 00 donc sa donne 00 01 00 01 en litlle sois 17 et non 3... Donc je ne vois pas trop ai-ce ma technique qui n'est pas bonne? Bref merci d'avance ![]() RE: Litlle-Endian? - ark - 04-01-2013 Ah, tu cherches donc une opération qui marche pour pour toute ta liste ? Apres, pour le little / big endian, c'est juste une notation, 0b1000 en big endian ca fait 8(10). Mais 0b0001 en little endian c'est toujours 8(10) :p C'est juste la notation qui change. RE: Litlle-Endian? - gr4ph0s - 04-01-2013 Oui je recherche une opération(qui normalement est la même, je verrais pas pourquoi ça ne serais pas la même ^^) pour toute la liste. En effet les nombres de gauche sont les données dans la base de donné et les nombres de droites ceux dans un fichier. Mon but étant de faire un programme pour gérer la mise à jour automatique de la BDD en fonction du fichier ![]() Oui ce n'est qu'une notation mais bon transformer 0b1000 en binaire big endian ne donnera pas(logiquement) la même chose que 0b0001 en big endian :p RE: Litlle-Endian? - gruik - 04-01-2013 pour effectuer une conversion vers du gros indien l'instruction movbe fait ça très bien sur 16, 32 ou 64 bits sinon pour essayer d'y voir un peu plus clair : Code PYTHON :
les choses apparaissent mieux, on voit clairement qu'il s'agit pas d'une conversion little/big endian, on dirait que chaque bit est comme séparé par '00', au début j'ai cru à un truc genre 8^bitnum, mais ca tombe vite à l'eau, on dirait également qu'il y a une sorte de wrap des bits, ou alors il s'agit peut être juste d'une transformation bit à bit en tous cas j'ai plutot l'impression que la transformation n'est pas simpliste comme une conversion xyz ou une opération standard, à voir... btw t'aurais moyen de choper les valeurs pour 32, 64 et 128 stp ? RE: Litlle-Endian? - gr4ph0s - 05-01-2013 32 dans la BDD me donne 256 dans le fichier. 64 dans la BDD me donne 2097152 dans le fichier. L'ID 128 n'existe pas(va savoir pourquoi?..) mais 256 dans la BDD me donne 4 dans le fichier Selon mes recherche a creuser peut être mais sa me parait bien compliqué. 1 = 8 => 8 2 = 64 => 8*8 3 = 72 => 8*8+8 4 = 512 => (8*8*8) 5 = 520 => (8*8*8) + 8 6 = 576 => (8*8*8) + (8*8) 7 = 584 => (8*8*8) + (8*8+8) 8 = 32768 => (8*8*8) *8*8 9 = 32776 => ((8*8*8) *8*8) + 8 10 = 32832 => ((8*8*8) *8*8) + 8*8 11 = 32840 => ((8*8*8) *8*8) + 8*8+8 12 = 33280 => ((8*8*8) *8*8) + (8*8*8) 13 = 33288 => (((8*8*8) *8*8) + (8*8*8)) + 8 14 = 33344 => (((8*8*8) *8*8) + (8*8*8)) + 8*8 15 = 33352 => (((8*8*8) *8*8) + (8*8*8)) + 8*8+8 Et la Dafuck.... 16 = 2 17 = 10 => 2+8 18 = 66 => 2+8*8 19 = 74 => 2+8*8+8 En effet il semblerais que toute les 16 ID on recommence au début... Mais bon c'est bizarre et je reste persuadé qu'il s'agit d'une opération sur les bits car ça serais complètement illogique de devoir refaire à chaque fois une suite mathématique pour obtenir l'ID 9082006 par exemple. En tout cas merci de ta réponse ![]() RE: Litlle-Endian? - gruik - 06-01-2013 comme ça au pif je dirais que c'est de la pure permutation de bits, alors peut-être qu'il y a une formule magique derrière évidement... actuellement on aurait donc la table de permutations suivante : Code PYTHON :
ça se vérifie bien, par exemple 19 en décimal donne 10011 en binaire, passé à la permutation de bits on obtient 2*1 + 32768*0 + 512*0 + 64*1 + 8*1 soit 2 + 64 + 8 = 74, comme prévu il serait donc intéressant d'avoir les valeurs pour 512,1024,2048,4096,8192,16384,32768,65536 etc. voire jusqu'à 2^24 ou 2^32 possiblement (puisque 2097152 = 2^21) toujours au pifomètre je verrais bien le bit 12 (4096) correspondre à 1, une intuition... |