Convertion d'une fonction Delphi en Php

Signaler
Messages postés
11
Date d'inscription
mardi 14 janvier 2003
Statut
Membre
Dernière intervention
10 mai 2007
-
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
-
Bonjour a tous !

JE debute dans le Php et je dois dire que j'ai un peu de mal mais je
dois utiliser cette fonction ecrite en delphi sur une page HTML .


function MacStr(const AMac : int64) : string;

var

  pR : PChar;

  pB : ^byte;

  N  : integer;

const

  BTC : array[$0..$F] of char = '0123456789ABCDEF';

begin

  pB := @AMac;    {pointe l'@ mac}

  inc(pB,5);

  SetLength(Result, 17);  {chaine de 17 caractères en sortie 6 octets de 2 caractères + 5 sépararteus}

  pR := PChar(Result);

  inc(pr,15);       {pointe le résultat}

  for N := 0 to 5 do

  begin

    if N >0 then

    begin

      pR[0] := '-';

      dec(pR,2);

    end;


    pR[0] := BTC[ pB^ shr 4 ];       {décale la valeur binaire de @Mac de 4 vers la droite = division par 2^4 soit 16}

    pR[1] := BTC[ pB^ and $F ];

    dec(pB);

    dec(pR, 1);


  end;

end;


Pour la petite histoire ca me permet de remettre en forme une adresse MAC en entier sous forme Hexa.


Mais j'ai beaucoup de mal avec les pointeurs sous Php...

voila si quelqu'un y arrive


Merci d'avance !

Vive le monde du libre }:)

Vive le monde du libre }:)

3 réponses

Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
Bonjour,

Je ne suis pas sur que tout le monde comprenne le delphi ici. Serait-il possible de décrire précisement ce que tu attends de ta fonction stp? (donnée en entrée, donnée en sortie ainsi que le format...)
Messages postés
11
Date d'inscription
mardi 14 janvier 2003
Statut
Membre
Dernière intervention
10 mai 2007
1
Bonjour ...

Oui pas de souci

Cette fonction me permet de rentrer un grand chiffre d'une bonne 10aine de numeros. Je cherche a obtenir un traitement qui me permettra d'obtenir, a partir de ce numero, l'adresse MAC en hexa 4F:45:6B ...car je ne l'ai pas dis mais ce numero est en fait une adresse MAC ! voila !

Vive le monde du libre }:)
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
Désolé de ne répondre que maintenant mais je n'avais plus suivit la discussion.

Voici une petite fonction, qui je l'espère correspond à tes attentes. Elle attend une chaîne de bit en entrée et ressort une chaîne d'hexadécimal avec un tiret entre chaque octet (format de l'adresse mac) :

<?php
  function MacStr($AMac){

  $adresse_mac = array();
  // Tableau contenant la conversion binaire -> hexa  $hex array(   0   > "0",
                  1    => "1",
                  10   => "2",
                  11   => "3",
                  100  => "4",
                  101  => "5",
                  110  => "6",
                  111  => "7",
                  1000 => "8",
                  1001 => "9",
                  1010 => "A",
                  1011 => "B",
                  1100 => "C",
                  1101 => "D",
                  1110 => "E",
                  1111 => "F");
                 
   $lenght = strlen($AMac); // on récupère la taille de la chaîne de caractère
  
   for($x = $lenght-4; $x >= 0;$x -= 4){ // on travail sur la chaîne en partant du dernier caractère

    $index = substr($AMac,$x,4)*1;  // on parse en int (je n'ai pas trouvé mieux pour le faire )

    array_push($adresse_mac,$hex[$index]); //on ajoute le quartet dans le tableau
   
    if ($x % 8 == 0 && $x != 0){ // on ajoute un tiret à chaque octet sauf pour le dernier
      array_push($adresse_mac,"-");
    }
   }
  
  $adresse_mac = array_reverse($adresse_mac); // on inverse le tableau pour afficher l'adresse dans le bon sens
  return implode("",$adresse_mac); // on convertit le tableau en string et on renvoit la chaîne

  }

  // appel de la fonction et affichage de la valeur de retour
  echo MacStr("111100001010100001110011");
?>

Bonne prog