Avatar billede the_saint Nybegynder
23. marts 2006 - 08:07 Der er 19 kommentarer og
1 løsning

MAC Adresse, i rene tal

Hej eksperter ...

Jeg sidder og er ved at tilrette www.netbootdisk.com's boot diskette, så den matcher mit behov...
Til det har jeg brug for at få sat en variable indeholderne en MAC adresse, UDEN "-" .. Jeg har en varible med en normal mac adresse, men har behov for at få fjernet "-" (Det skal bruges til COMPUTERNAME, og der er 17 tegn for meget)...

Evt et lille c program som får en mac adresse ind, og retunere den uden - ...

Håber der er en som kan hjælpe :)
Avatar billede soreno Praktikant
23. marts 2006 - 08:21 #1
Og det skal virke i DOS ?

Hvilken compiler bruger du ?
Avatar billede soreno Praktikant
23. marts 2006 - 08:37 #2
Eksempel som er lavet i VS2005:

#include <string.h>
#include <stdio.h>

void cleanMac(char *input)
{
    char *hex = "0123456789abcdefABCDEF";
    char *ptr;
    ptr = strpbrk(input, hex);
    while(ptr != NULL)
    {
        printf("%c", *ptr);
        ptr = strpbrk(ptr+1, hex);
    }
    printf("\n");
}

int _tmain(int argc, _TCHAR* argv[])
{
    char *test1 = "fF:aA:aC:Ed:33:25";
    printf("%s\n", test1);
    cleanMac(test1);
    printf("--------------------\n");
    char *test2 = "ff-aa-ac-cd-33-25";
    printf("%s\n", test2);
    cleanMac(test2);
    getchar();
    return 0;
}

Output:
fF:aA:aC:Ed:33:25
fFaAaCEd3325
--------------------
ff-aa-ac-cd-33-25
ffaaaccd3325
Avatar billede the_saint Nybegynder
23. marts 2006 - 08:46 #3
Ja, det skal virke i dos...
Soreno ... Behøver jeg VS2005 for at compile det? eller kan jeg bare compile det med en hvilken som helst c compiler?
Avatar billede soreno Praktikant
23. marts 2006 - 08:48 #4
Hvis det skal virke i dos så skal du have en compiler som kan outputte en dos executable.

Principielt skulle du kunne tage metoden og bruge den i andre C compilere.
Avatar billede the_saint Nybegynder
23. marts 2006 - 08:49 #5
okay, jeg prøver lige at kigge på det :)
Avatar billede the_saint Nybegynder
23. marts 2006 - 09:03 #6
Sad lige og rodede lidt rundt med det selv..

Og kom frem til:

#include <stdio.h>
#include <string.h>

#define DELIM  "-"

int main(int argc, char *argv[])
{
  char  result[12];
  char  buff[17];
  int  ntokens = 0;
 
      if(argc>0)
      {
        char  *sep = strtok(argv[0], DELIM);
   
        while (sep != NULL)
        {
//          strcpy(words[ntokens++], sep);
            sprintf(result,"%s%s",result, sep);
            sep = strtok(NULL, DELIM);
        }
        printf("%s", result);
    }
    else
    {
        return false;
    }

  return(0);
}


men når jeg kører programmet melder det fejl :|
"An access violation (Segmentation fault) raised in your program" ..
Jeg bruger bloodshed 5 ...
Avatar billede soreno Praktikant
23. marts 2006 - 09:06 #7
Kan den compiler outputte DOS executables ?
Avatar billede the_saint Nybegynder
23. marts 2006 - 09:13 #8
Hvordan tjekker jeg det? ...

Eller kan du fortælle mig en som kan :)

Har ALDRIG kodet noget til dos før :|
Avatar billede the_saint Nybegynder
23. marts 2006 - 09:23 #9
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
  char  result[13];
  int p = 0;
  int i;
  for(i=0;i<strlen(argv[1]);i++)
  {
    if(argv[1][i] != '-')
    {
    result[p] = argv[1][i];
    p++;
    }
  }
  printf("%s\n", result);
  return(0);
}

En kortere og nemmere kode ...

Men, den virker fint... men når den retunrere værdien, så skrive de lige ? " efter strengen :S

Den er der ikke når jeg debugger?
Avatar billede soreno Praktikant
23. marts 2006 - 09:24 #10
Hvis du bruger mingw compileren (det gør du formentlig) så kan du ikke.

Du kan formentlig bruge denne:
http://www.delorie.com/djgpp/

Men det er ikke noget jeg har (huskbar) erfaring med.
Avatar billede the_saint Nybegynder
23. marts 2006 - 09:25 #11
Når jeg prøver at køre programmet i DOS siger den, This program cannot be run in DOS mode .. :(
Avatar billede the_saint Nybegynder
23. marts 2006 - 09:54 #12
Nu fik jeg compilet den så den kan køre i DOS, men den skriver stadig tilfældigt tal :(
Avatar billede soreno Praktikant
23. marts 2006 - 09:57 #13
Prøv lige at paste din kode.
Så kigger jeg på det.
Avatar billede the_saint Nybegynder
23. marts 2006 - 09:59 #14
Jeg fik løst det, og postede også min kode længere oppe ...
Min kode er nu sådan:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
  char  result[13]={0};
  int p = 0;
  int i;
  for(i=0;i<strlen(argv[1]);i++)
  {
    if(argv[1][i] != '-')
    {
    result[p] = argv[1][i];
    p++;
    }
  }
  printf("%s\n", result);
  return(0);
}
Avatar billede soreno Praktikant
23. marts 2006 - 10:03 #15
Jeg synes nu den her kode er lidt mere sikker:

#include <string.h>
#include <stdio.h>

void cleanMac(char *input)
{
    char *hex = "0123456789abcdefABCDEF";
    char *ptr;
    ptr = strpbrk(input, hex);
    while(ptr != NULL)
    {
        printf("%c", *ptr);
        ptr = strpbrk(ptr+1, hex);
    }
    printf("\n");
}

int main(int argc, char **argv)
{
    if(argc != 2)
    {
        printf("usage: foobar.exe mac_address\n");
        printf("example: foobar.exe aa-bb-cc-dd-44-22\n");
    } else
    {
        cleanMac(argv[1]);
    }
    return 0;
}

For hvad nu hvis delimiter ikke er "-" men f.eks. ":" ?
Eller hvad nu hvis der kommer fejlinput til dit program ?
Avatar billede the_saint Nybegynder
23. marts 2006 - 10:08 #16
soreno, Ja vidst er din kode mere sikker :o)

Men min kode var også bare en test, uden nogen form for tjek overhovedet, jeg koder ikke så meget C, så jo mere tjek jo størrere chance er der for fejl :)
Avatar billede soreno Praktikant
23. marts 2006 - 10:10 #17
Et andet problem med din kode er hvis input er længere end længden af result arrayet.
Så sker der mærkelige ting :-)
Avatar billede the_saint Nybegynder
23. marts 2006 - 10:17 #18
Inputtet kommer fra et andet program som retunere xx-xx-xx-xx-xx-xx hele tiden :)
Avatar billede soreno Praktikant
23. marts 2006 - 10:20 #19
Ok, jeg synes bare det er god skik at tage højde for alle
de fremtidsscenarier som man kan (inden for et tidsbudget).

;-)
Avatar billede the_saint Nybegynder
23. marts 2006 - 10:25 #20
Ja selvfølgelig ... Men som sagt, så er det her kun for at mindske så mange fejl som muligt (kode fejl) ..

Senere kan jeg meget vel lave mere tjek - tiden er der bare ikke til det nu...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester