µLua DS - Forum officiel | Official forum Index du Forum

µLua DS - Forum officiel | Official forum
Le bon endroit pour en savoir plus sur MicroLua et pour parler de vos projets ! | The right place to learn more about MicroLua and talk about your projects !

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer   ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

[LUA/lib] du binaire avec Lua 5.1

 
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Coin du dév' -> Librairies
Sujet précédent :: Sujet suivant  
Auteur Message
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Lun 17 Sep 2012 - 16:44    Sujet du message: [LUA/lib] du binaire avec Lua 5.1 Répondre en citant

LIBBIN
 


  Librairie de calcul binaire qui permet de faire: des conversions binaire-décimal, le NOT, le OR, le AND, le XOR, les décallage avec et sans retenue.

Pour le chargement, c'est comme d'habitude, on copie la librairie dans sont dossier et on fait un dofile("libbin.lua")
ou alors votre version du shell est à jour (celle qui fait les mises à jour par le web) et vous faite un simple require("libbin")

Fonctions utiles:

 - Conversion entier vers binaire
   binary = libbin.tobin(integer)
  integer: nombre entier à convertir en binaire.

 - Conversion binaire vers entier
   integer = libbin.toint(binary)
  banary: nombre binaire à convertir en entier.

 - Inversion de tous les bits d'un nombre
  integer = libbin.bnot(integer)

 - Et binaire entre deux entier
  integer = libbin.band(integer1, integer2)

 - Ou binaire entre deux entier
  integer = libbin.bor(integer1, integer2)

 - Ou exclusif entre deux entier
  integer = libbin.bxor(integer1, integer2)

 - Décalage à gauche de X bits d'un entier
  integer = libbin.lbs(integer, shift)
  shift: nombre entier indiquant le décalage

 - Décalage à droite de X bits d'un entier
  integer = libbin.rbs(integer, shift)
  shift: nombre entier indiquant le décalage

 - Décalage bouclé à gauche d'un nombre entier sur 32bits
  integer = libbin.rlbs(integer, shift)

 - Décalage bouclé à droite d'un nombre entier sur 32bits
  integer = libbin.rrbs(integer, shift)



 
Code:
libbin = {}

libbin.tobin = function (integer)
    local hex = string.format("%X",integer)
    local tabcor = {[0] = "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
                    "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"}
    local i,j
    local bin = ""
    for i = 1,string.len(hex) do
        j = tonumber(string.sub(hex,i,i),16)
        bin = bin..tabcor[j]
    end
    return bin
end

libbin.toint = function (binary)
    return tonumber(binary,2)
end

libbin.fill = function (binary,taille)
    local num = taille - string.len(binary)
    return string.rep("0",num)..binary
end

libbin.bnot = function(integer)
    local bin = libbin.tobin(integer)
    local i
    bin = libbin.fill(bin,32)
    bin = string.gsub(bin,"0","A")
    bin = string.gsub(bin,"1","0")
    bin = string.gsub(bin,"A","1")
    return libbin.toint(bin)
end

libbin.band = function(int1, int2)
    local bin1 = libbin.tobin(int1)
    local bin2 = libbin.tobin(int2)
    local bin3 = ""
    local i,j
    if(string.len(bin1) > string.len(bin2)) then bin2 = libbin.fill(bin2,string.len(bin1)) end
    if(string.len(bin1) < string.len(bin2)) then bin1 = libbin.fill(bin1,string.len(bin2)) end
    for i=1,string.len(bin1) do
        j = tonumber(string.sub(bin1,i,i)) * tonumber(string.sub(bin2,i,i))
        bin3 = bin3..j
    end
    return libbin.toint(bin3)
end

libbin.bor = function(int1, int2)
    local bin1 = libbin.tobin(int1)
    local bin2 = libbin.tobin(int2)
    local bin3 = ""
    local i,j
    if(string.len(bin1) > string.len(bin2)) then bin2 = libbin.fill(bin2,string.len(bin1)) end
    if(string.len(bin1) < string.len(bin2)) then bin1 = libbin.fill(bin1,string.len(bin2)) end
    for i=1,string.len(bin1) do
        j = tonumber(string.sub(bin1,i,i)) + tonumber(string.sub(bin2,i,i))
        if(j == 2) then j = 1 end
        bin3 = bin3..j
    end
    return libbin.toint(bin3)
end

libbin.bxor = function(int1, int2)
    local bin1 = libbin.tobin(int1)
    local bin2 = libbin.tobin(int2)
    local bin3 = ""
    local i,j
    if(string.len(bin1) > string.len(bin2)) then bin2 = libbin.fill(bin2,string.len(bin1)) end
    if(string.len(bin1) < string.len(bin2)) then bin1 = libbin.fill(bin1,string.len(bin2)) end
    for i=1,string.len(bin1) do
        j = tonumber(string.sub(bin1,i,i))+tonumber(string.sub(bin2,i,i))
        if (j == 2) then j = 0 end
        bin3 = bin3..j
    end
    return libbin.toint(bin3)
end

libbin.lbs = function (integer, shift)
    local bin = libbin.tobin(integer)
    bin = libbin.fill(bin, 32)
    bin = string.sub(bin,shift+1,-1)..string.rep("0",shift)
    return libbin.toint(bin)
end

libbin.rbs = function (integer, shift)
    local bin = libbin.tobin(integer)
    bin = libbin.fill(bin, 32)
    bin = string.sub(bin,1,-shift-1)
    bin = libbin.fill(bin,32)
    return libbin.toint(bin)
end

libbin.rlbs = function (integer, shift)
    local bin = libbin.tobin(integer)
    bin = libbin.fill(bin, 32)
    bin = string.sub(bin,shift+1,-1)..string.sub(bin,1,shift)
    return libbin.toint(bin)
end

libbin.rrbs = function (integer, shift)
    local bin = libbin.tobin(integer)
    bin = libbin.fill(bin, 32)
    bin = string.sub(bin,-shift,-1)..string.sub(bin,1,-shift-1)
    return libbin.toint(bin)
end


_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
Publicité






MessagePosté le: Lun 17 Sep 2012 - 16:44    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
thermo_nono
Modérateur

Hors ligne

Inscrit le: 31 Déc 2008
Messages: 2 415
Localisation: La Géhenne

MessagePosté le: Mar 18 Sep 2012 - 00:46    Sujet du message: [LUA/lib] du binaire avec Lua 5.1 Répondre en citant

merci ! 
je ne sais pas comment je vais l'utiliser, mais je vais l'utiliser. 
_________________
“Qui reçoit une idée de moi reçoit de la connaissance sans diminuer la mienne, comme celui qui allume sa chandelle à la mienne reçoit la lumière sans me plonger dans l’obscurité.” - Thomas Jefferson


Revenir en haut
Visiter le site web du posteur MSN
Fantasix
Modérateur

Hors ligne

Inscrit le: 26 Avr 2010
Messages: 1 317
Localisation: SCREEN_UP, en -1, -1

MessagePosté le: Mar 18 Sep 2012 - 09:22    Sujet du message: [LUA/lib] du binaire avec Lua 5.1 Répondre en citant

Merci Papy' !

J'vais l'utiliser, mais juste pour la conversion entier vers binaire Smile *Niark niark*

Fanta'
_________________


BMA News :

Création du Homebrew Storage en cours ...


Revenir en haut
Visiter le site web du posteur
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Mar 18 Sep 2012 - 09:35    Sujet du message: [LUA/lib] du binaire avec Lua 5.1 Répondre en citant

Ben c'est fait pour Very Happy , servez vous mais attention, j'y ai mis des droits, j'ai déposé le brevet, et ça ne coûte que 5centimes par utilisation de la fonction Razz .... Mheuuu non je rigole, c'est gratuit.
_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 03:46    Sujet du message: [LUA/lib] du binaire avec Lua 5.1

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Coin du dév' -> Librairies Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com