Page 1 sur 1

Conversion en binaire

Posté : 26 juil. 2007, 13:29
par t5in9tao
Bonjour,

Je voudrais convertir une chaîne quelconque en binaire. Si c'est possible, je voudrais aussi que cette chaîne puisse ne pas forcément être composée de caractères ASCII, afin de généraliser au maximum.

Merci beaucoup pour votre aide.

Posté : 26 juil. 2007, 14:04
par Genova
Bonjour, j'ai pas trouvé de fonction dans la doc PHP permettant de faire du binaire depuis une chaîne de caractère (étonnant, ou bien j'ai mal cherché).

Je t'ai fait des fonctions qui font ce boulot :
<?php

// Converti une string en binaire
function str2bin($str)
{
	$bin = '';
	$length = strlen($str);
	for ($i = 0; $i < $length; $i++)
	{
		// On converti le code ASCII du char en binaire
		$convert = decbin(ord($str[$i]));

		// On complète avec les 0 pour faire 1 octet
		$convert = strrev(str_pad(strrev($convert), 8, '0'));
		$bin .= $convert;
	}
	return ($bin);
}

// Converti du binaire en string
function bin2str($bin)
{
	$str = '';
	$split = str_split($bin, 8);
	$count = count($split);
	for ($i = 0; $i < $count; $i++)
	{
		$str .= chr(bindec($split[$i]));
	}
	return ($str);
}

$str = 'salut';
$bin = str2bin($str);
echo "STR=$str<br />BIN=$bin<br />";
$str = bin2str($bin);
echo "STR=$str<br />";

?>

Posté : 26 juil. 2007, 14:21
par Hywan
Le script ne fonctionne que sur 1 octet (mais il est bien :)). Si on est sur un encodage UTF-8, et qu'on écrit en chinois, les caractères peuvent être encodés sur plusieurs octets. En revanche, je ne vois pas comment y trouver une solution. Peut-être faut-il regarder du côté de mb_string ?

Posté : 26 juil. 2007, 14:31
par Genova
Ben l'UTF8 au lieu que ton char soit sur 1 octet, il pourra par exemple être sur 3 octets, donc la fonction marchera tout de même puisqu'elle traduit la chaîne octet par octet (j'ai fait le test, ça tourne sans soucis).

Posté : 26 juil. 2007, 14:39
par Hywan
Ah bah oui. +1 ;-)

J'ai également regardé sur la documentation, il n'y a rien. C'est étrange, j'aurais juré que ... :)

Posté : 26 juil. 2007, 14:57
par t5in9tao
Wouhw! C'est exactement ce que je souhaitais ! :o
Je viens de la tester avec un caractère japonais, celui-ci : 森, c'est ça semble très bien fonctionner.

MERCI Genova et HyWaN !

Peut-être que dans PHP 6, une nouvelle fonction permettra ce genre de conversion directement. Quoi qu'il en soit celle là est très claire et très fonctionnelle. :D

Posté : 26 juil. 2007, 16:29
par titerm
Dans les fonctions standards pour faire ca, y a pack() et unpack()

Posté : 26 juil. 2007, 18:49
par Hywan
MERCI Genova et HyWaN !
J'ai pas fais grand chose, c'est surtout Genova ;-)