Système Hexadécimale Bibi-binaire

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Système Hexadécimale Bibi-binaire

Message par Shadow »

Bonsoir,

Voici le Système Hexadécimale Bibi-binaire mis en pratique.
Codage, décodage.

Code : Tout sélectionner

; Code crée par Monsieur Dieppedalle David le 09/03/2016.
; Système Hexadécimale Bibi-binaire.

Procedure.s InverserChaine(Chaine.s, DelimiteurChaine$ = " ")
  Protected Phrase.s = "", Premier = 1
  
  For i = CountString(Chaine, DelimiteurChaine$) + 1 To 1 Step - 1
    If Premier = 0
      Phrase + DelimiteurChaine$
    Else
      Premier = 0
    EndIf
    Phrase + StringField(Chaine, i, DelimiteurChaine$)
  Next
  
  ProcedureReturn Phrase
EndProcedure

Procedure.s DecimalToBibiBinaire(Nombre.q)
  
  ChaineHexadecimalBibiBinaire$ = "HO.HA.HE.HI.BO.BA.BE.BI.KO.KA.KE.KI.DO.DA.DE.DI"
  
  Repeat
    
    Division.q = Nombre.q / 16
    Reste.q = Nombre.q - (Division.q * 16)
    
    Sortie$ + StringField(ChaineHexadecimalBibiBinaire$, Reste.q + 1, ".") + "."
    
    Nombre.q = Division.q
    
  Until Division.q < 16
  
  If Division.q > 0
    Sortie$ + StringField(ChaineHexadecimalBibiBinaire$, Division.q + 1, ".")
  EndIf
  
  ProcedureReturn RemoveString(InverserChaine(Sortie$, "."), ".")
  
EndProcedure

Procedure.q BibiBinaireToDecimal(ChaineBibiBinaire$)
  
  ChaineHexadecimalBibiBinaire$ = "HO.HA.HE.HI.BO.BA.BE.BI.KO.KA.KE.KI.DO.DA.DE.DI"
  
  If ChaineBibiBinaire$ > ""
    
    For Index.i = 1 To Len(ChaineBibiBinaire$) Step 2
      
      Groupe$ = Mid(ChaineBibiBinaire$, Index.i, 2)
      
      For I.i = 1 To CountString(ChaineHexadecimalBibiBinaire$, ".") + 1
        
        If StringField(ChaineHexadecimalBibiBinaire$, I.i, ".") = Groupe$
          Chiffre.q = I - 1
          Break
        EndIf
        
      Next
      
      NombreSortie.q * 16
      NombreSortie.q + Chiffre.q
      
    Next
    
    ProcedureReturn NombreSortie.q
  Else
    
    ProcedureReturn 0
  EndIf
  
EndProcedure

Nombre.q = 9223372036854775807

Debug DecimalToBibiBinaire(Nombre.q)
Debug BibiBinaireToDecimal("BIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDI")
Dernière modification par Shadow le mer. 09/mars/2016 2:38, modifié 1 fois.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Système Hexadécimale Bibi-binaire

Message par falsam »

Il l'a fait ! : J'ai fait une allusion à ce système sur ce post. http://www.purebasic.fr/french/viewtopi ... 12#p181012

Boby Lapointe ne saura jamais que quelqu'un s’intéresse encore à son système.

Ça fonctionne. Bravo. :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Système Hexadécimale Bibi-binaire

Message par Shadow »

Et oui, je l'ais fais !!!

Oui je sais, c'est grâce à toi d'ailleurs !
Merci.

Ceci marche très bien oui.
Par contre réflexion faite (Après test), ce système semble moins performant sur des images :?

Quand je fais ce code, c'est plus performant une fois compressé avec 7-Zip:

Code : Tout sélectionner


; Code crée par Monsieur Dieppedalle David le 09/03/2016.
; Système Hexadécimale Bibi-binaire.

; Note: Ce système est encore un peut plus performant que le Hex standard (0 à F)
; l'or de la compression avec un compresseur, Ex: 7-Zip.

Procedure.s InverserChaine(Chaine.s, DelimiteurChaine$ = " ")
  Protected Phrase.s = "", Premier = 1
  
  For i = CountString(Chaine, DelimiteurChaine$) + 1 To 1 Step - 1
    If Premier = 0
      Phrase + DelimiteurChaine$
    Else
      Premier = 0
    EndIf
    Phrase + StringField(Chaine, i, DelimiteurChaine$)
  Next
  
  ProcedureReturn Phrase
EndProcedure

Procedure.s DecimalToBibiBinaire(Nombre.q)
  
  ChaineHexadecimalBibiBinaire$ = "HO.HA.HE.HI.BO.BA.BE.BI.KO.KA.KE.KI.DO.DA.DE.DI"
  
  Repeat
    
    Division.q = Nombre.q / 16
    Reste.q = Nombre.q - (Division.q * 16)
    
    Sortie$ + StringField(ChaineHexadecimalBibiBinaire$, Reste.q + 1, ".") + "."
    
    Nombre.q = Division.q
    
  Until Division.q < 16
  
  If Division.q > 0
    Sortie$ + StringField(ChaineHexadecimalBibiBinaire$, Division.q + 1, ".")
  EndIf
  
  ProcedureReturn RemoveString(InverserChaine(Sortie$, "."), ".")
  
EndProcedure

Procedure.q BibiBinaireToDecimal(ChaineBibiBinaire$)
  
  ChaineHexadecimalBibiBinaire$ = "HO.HA.HE.HI.BO.BA.BE.BI.KO.KA.KE.KI.DO.DA.DE.DI"
  
  If ChaineBibiBinaire$ > ""
    
    For Index.i = 1 To Len(ChaineBibiBinaire$) Step 2
      
      Groupe$ = Mid(ChaineBibiBinaire$, Index.i, 2)
      
      For I.i = 1 To CountString(ChaineHexadecimalBibiBinaire$, ".") + 1
        
        If StringField(ChaineHexadecimalBibiBinaire$, I.i, ".") = Groupe$
          Chiffre.q = I - 1
          Break
        EndIf
        
      Next
      
      NombreSortie.q * 16
      NombreSortie.q + Chiffre.q
      
    Next
    
    ProcedureReturn NombreSortie.q
  Else
    
    ProcedureReturn 0
  EndIf
  
EndProcedure


CreateFile(0, "Test 01.txt")
CreateFile(1, "Test 02.txt")

For I = 1 To 10000000
  N = Random(15, 0)
  WriteString(0, RSet(Hex(N), 2, "0"))
  WriteString(1, DecimalToBibiBinaire(N))
Next

CloseFile(0)
CloseFile(1)
Mais avec des image c'est moins bien, pas énorme (Quelque dizaine de K de plus) mais moins bien quand même...
Je continue :D
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Système Hexadécimale Bibi-binaire

Message par Shadow »

Le système Bibi-binaire est un chouilla plus performant en compression (Avec 7-Zip) que le système
Hexa standard, à condition que les valeur soit aléatoire sinon ça marche pas.

Une image de 10 000 x 10 000 en pixel aléatoire convertie en Hex et en Bibi-binaire
sera un tout petit peu mieux compresser en Bibi-binaire.

Allez savoir pourquoi :?

Taille de l'image PNG = 327 Mo. (Paint)
Taille du fichier texte Hex compressé avec 7-Zip en maxi = 322 586 752 Octets = 307 Mo (20 Mo de moins quand même !)
Taille du fichier texte Bibi-binaire compressé avec 7-Zip en maxi = 320 302 457 Octets = 305 Mo, 2284295 de moins que en Hex standard, env 2 Mo.

Sur les image classique, ce système ne semble pas fonctionner et prends plus de place que le Hex standard.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Système Hexadécimale Bibi-binaire

Message par Shadow »

Oui tu as raison tient et je te le prouve :mrgreen:

Tien un exemple pour toi:

Code : Tout sélectionner

debug ReverseString( "Ceci est une chaîne") = enîahc enu tse iceC
debug InverserChaine("Ceci est une chaîne") = chaîne une est Ceci
C'est vraie que c'est pareil :roll:
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Répondre