IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Decoupage chaine de caractére + inverser ordre caractéres


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Points : 29
    Points
    29
    Par défaut Decoupage chaine de caractére + inverser ordre caractéres
    Bonjour,

    Je suis actuellement sur un problème de modification de chaine de caractères où je suis bloqué :

    J'ai 18 octets codés en binaire donc 18 fois XXXXXXXX (où X est un 0 ou un 1), je concatène ces 18 octets binaire (=144bits) en 1 seule trame binaire :

    Concaténation des mes variables Octet1bin+Octet2bin+....Octet18bin = OctetbinTotal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $OctetbinTotal ="";
    for ($i = 1; $i < 19; $i++) {
    	$OctetbinTotal =  $OctetbinTotal.${'Octet' . $i . 'bin'};
    	//echo "<br>".${'Octet' . $i . 'bin'};
    	}
    Je voudrais faire 'effet miroir' sur chacun de mes octets, c'est à dire :
    si l'octet 1 vaut 00011111 je voudrais que ça me retourne 11111000, en gros que pour chaque octet le dernier bit devient le premier, l'avant dernier vers le second, ect...

    Pour bien comprendre prenons le cas de 2 octets
    00110011 octet 1
    01010101 octet 2
    0011001101010101 octet 1+2
    Resultat attendu :1100110010101010

    La c'est dans le cas d'une trame de 2 octets moi ma trame vaut 18octets.

    Étant donné que j'ai une trame de 8x18=144bits, il faudrait que ça découpe tout les 8bits et que ça inverse l'ordre.

    Pour découper ma trame tous les 8 caractéres j'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $rest = str_split($OctetbinTotal , 8);
    Mais ça me le met sous forme de tableau et je ne sais comment inverser les chiffre dans chaque ligne du tableau, de plus je veux que au final ma variable OctetbinTotal soit sous forme d'une chaine de caractère et non sous forme de tableau.

    Merci par avance pour votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as la fonction strrev() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $OctetbinTotal ="";
    for ($i = 1; $i < 19; $i++) {
    	$OctetbinTotal =  $OctetbinTotal.strrev(${'Octet' . $i . 'bin'});
    }
    Au passage tu devrais utiliser un tableau $Octet[x] plutôt que des variables $Octetx
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    ou encore pour compléter la réponse du sieur sabotage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $OctetbinTotal = '0011001101010101';
    $data = implode('', array_map('strrev', str_split($OctetbinTotal , 8)));

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il m'énerve
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Sinon pour les performances (pas trop pour la lisibilité), on peut faire ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $res = $OctetbinTotal;
    for ($i=0; $i<144; $i+=($n==3)?5:1) {
        $n=$i%8;
        $li = $i + 7 - $n - $n;
        list($res[$i], $res[$li]) = [$res[$li], $res[$i]];
    }
    Pour chaque groupe de 8 bits, on permute les quatre premiers bits un à un en partant du début avec les quatre derniers en partant de la fin, puis on saute aux 8 suivants.

    Ou plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for ($i=0; $i<144; $i+=5) {
        $l=$i+7;
        list($res[$i], $res[$l]) = [$res[$l], $res[$i]]; $i++; $l--;
        list($res[$i], $res[$l]) = [$res[$l], $res[$i]]; $i++; $l--;
        list($res[$i], $res[$l]) = [$res[$l], $res[$i]]; $i++; $l--;
        list($res[$i], $res[$l]) = [$res[$l], $res[$i]];
    }
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    Merci tout le monde ça fonctionne parfaitement

Discussions similaires

  1. Conversion chaine de caractère => entier (ordre des caractères primordial car ADN)
    Par ctobini dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 24/09/2007, 11h20
  2. Prob pour inverser des caractères
    Par benito62 dans le forum C
    Réponses: 15
    Dernier message: 27/11/2005, 08h21
  3. Réponses: 21
    Dernier message: 24/05/2005, 21h01
  4. [SQL2K]URGENT: récupérer jeu de caractères et ordre de tri ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/04/2005, 11h43
  5. [String] Inversion des caractères
    Par OverCat dans le forum Langage
    Réponses: 5
    Dernier message: 13/04/2005, 19h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo