Conversion en binaire

Petit nouveau ! | 2 Messages

26 juil. 2007, 13:29

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.
Modifié en dernier par t5in9tao le 26 juil. 2007, 14:58, modifié 1 fois.

ViPHP
ViPHP | 928 Messages

26 juil. 2007, 14:04

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 />";

?>

ViPHP
ViPHP | 4674 Messages

26 juil. 2007, 14:21

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 ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
ViPHP | 928 Messages

26 juil. 2007, 14:31

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).

ViPHP
ViPHP | 4674 Messages

26 juil. 2007, 14:39

Ah bah oui. +1 ;-)

J'ai également regardé sur la documentation, il n'y a rien. C'est étrange, j'aurais juré que ... :)
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Petit nouveau ! | 2 Messages

26 juil. 2007, 14:57

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

Mammouth du PHP | 505 Messages

26 juil. 2007, 16:29

Dans les fonctions standards pour faire ca, y a pack() et unpack()

ViPHP
ViPHP | 4674 Messages

26 juil. 2007, 18:49

MERCI Genova et HyWaN !
J'ai pas fais grand chose, c'est surtout Genova ;-)
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).