CodePython

Convertir une chaîne en un nombre binaire #python #code

Lors de la création d’une fonction de hashage, j’ai dû convertir une chaîne de caractères en nombre binaire… Voici la façon la plus élégante que j’ai trouvée. (Notez la factorisation ;-) )

def binstring2(s):
	return ''.join('%s'%('0'*(8-len(bin(ord(c))[2:])))+bin(ord(c))[2:] for c in s)

Explications :

A la base, j’avais trouvé sur Internet une méthode plus développée. Elle consistait à créer le tableau des 128 octets (bytes) comme ceci :

def b1(n):
	return "01"[n%2]
 
def b2(n):
	return b1(n>>1)+b1(n)
 
def b3(n):
	return b2(n>>2)+b2(n)
 
def b4(n):
	return b3(n>>4)+b3(n)
 
bytes = [ b4(n) for n in range(256)]

Puis à les réutiliser dans une fonction :

def binstring(s):
	return ''.join(bytes[ord(c)] for c in s)

Je me suis dit qu’on pouvait générer ce tableau plus simplement en faisant :

bytes = [bin(c)[2:] for c in range(128)]

Mais cela ne rajoutait pas les ’0′ manquants devant les premiers octets, alors j’ai modifié la génération du tableau en ajoutant une chaîne de ’0′ successifs devant les octets pour lesquels il en manquait :

bytes = ['%s'%('0'*(8-len(bin(c)[2:])))+bin(c)[2:] for c in range(128)]

Il s’agissait ensuite d’intégrer ce tableau dans la fonction « binstring » initiale :

def binstring2(s):
	return ''.join('%s'%('0'*(8-len(bin(ord(c))[2:])))+bin(ord(c))[2:] for c in s)

Cool, isn’t it ?

Related Posts with Thumbnails

Laisser une réponse

Connect with Facebook