eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › jak zamienić string na hex?
Ilość wypowiedzi w tym wątku: 3

  • 1. Data: 2010-07-06 07:49:46
    Temat: jak zamienić string na hex?
    Od: "Bronek (bryx) Tatukl" <b...@k...com>

    Napisałem na kolanie program do zamiany stringa na hex i niestety okazalo
    się, że zawiera błędy. Nie mam pojęcia gdzie może tkwić błąd.

    $./a.out ą
    strlen() [2]
    wyszlo mi 2, [ffffffff85]
    $./a.out ąc
    strlen() [3]
    wyszlo mi 3, [ffff63]

    Dlaczego wyniki sa rózne? Jeśli mój terminal działa w Utf-8 to ą powinno
    zawierać 2 znaki char. Jeśli jakoś inaczej to drugie wywołanie powinno być
    dłuższe niż pierwsze bo zawiera 2 znaki. Ktoś ma pomysł jak to poprawić?

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

    int main(int argc,char *argv[])
    {
    char *a,*b;
    int i,len;

    len = strlen( argv[1] );

    printf("strlen() [%d]\n",len);

    len=0;
    for(len = 0; argv[1][len] != '\0' ;len++ ) { }

    a=malloc( ( (2*len) +1 ) * sizeof(char) );
    b=a;

    for(i = 0; i < len ;i++ )
    {
    sprintf(a, "%02x", argv[1][i]);
    a += 2;
    }

    a = '\0';

    printf("wyszlo mi %d, [%s]\n",len,b);

    free(b);

    return 0;
    }



  • 2. Data: 2010-07-06 09:37:09
    Temat: Re: jak zamienić string na hex?
    Od: "Grzegorz Niemirowski" <g...@p...onet.pl>

    Bronek (bryx) Tatukl <b...@k...com> napisał(a):
    > Napisałem na kolanie program do zamiany stringa na hex i niestety okazalo
    > się, że zawiera błędy. Nie mam pojęcia gdzie może tkwić błąd.
    > $./a.out ą
    > strlen() [2]
    > wyszlo mi 2, [ffffffff85]
    > $./a.out ąc
    > strlen() [3]
    > wyszlo mi 3, [ffff63]
    > Dlaczego wyniki sa rózne? Jeśli mój terminal działa w Utf-8 to ą powinno
    > zawierać 2 znaki char. Jeśli jakoś inaczej to drugie wywołanie powinno
    > być dłuższe niż pierwsze bo zawiera 2 znaki. Ktoś ma pomysł jak to
    > poprawić?
    > _____________________________
    > #include <string.h>
    > #include <stdio.h>
    > #include <stdlib.h>
    > int main(int argc,char *argv[])
    > {
    > char *a,*b;
    > int i,len;
    > len = strlen( argv[1] );
    > printf("strlen() [%d]\n",len);
    > len=0;
    > for(len = 0; argv[1][len] != '\0' ;len++ ) { }
    > a=malloc( ( (2*len) +1 ) * sizeof(char) );
    > b=a;
    > for(i = 0; i < len ;i++ )
    > {
    > sprintf(a, "%02x", argv[1][i]);
    > a += 2;
    > }
    > a = '\0';
    > printf("wyszlo mi %d, [%s]\n",len,b);
    > free(b);
    > return 0;
    > }

    Najpierw wrzucasz literkę ą czyli bajty C4h i 85h. Ponieważ następuje
    nadpisanie to widzisz z tego tylko 85. Ponieważ nie konwertujesz do unsigned
    char to Ci dopisuje ff bo myśli, że to liczba ujemna. Jak potem wrzucasz
    literkę c ona ląduje na pozycji trzeciej cyfry bo robisz a+=2;
    Niepotrzebnie Ci ten sprintf wszystko pozaciemniał, uprość to np. tak:
    #include <stdio.h>
    #include <string.h>
    int main(int argc,char *argv[])
    {
    char *a,*b;
    int i,len;
    len = strlen( argv[1] );
    printf("strlen() [%d]\n",len);
    for(i = 0; i < len ;i++ )
    {
    printf("%x ",(unsigned char)argv[1][i]);
    }
    printf("\n");
    return 0;

    --
    Grzegorz Niemirowski
    http://www.grzegorz.net/
    OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
    Uptime: 12 days, 14 hours, 35 minutes and 48 seconds


  • 3. Data: 2010-07-06 18:18:28
    Temat: Re: jak zamienić string na hex?
    Od: "Bronek (bryx) Tatukl" <b...@k...com>

    > Najpierw wrzucasz literkę ą czyli bajty C4h i 85h. Ponieważ następuje
    > nadpisanie to widzisz z tego tylko 85. Ponieważ nie konwertujesz do
    > unsigned char to Ci dopisuje ff bo myśli, że to liczba ujemna. Jak potem
    > wrzucasz literkę c ona ląduje na pozycji trzeciej cyfry bo robisz a+=2;
    > Niepotrzebnie Ci ten sprintf wszystko pozaciemniał, uprość to np. tak:

    Bardzo dziekuje.
    Biedzilem sie nad tym drobnym bledem dosc dlugo. Dawno programowalem w C.
    Dziekuje.

    > #include <stdio.h>
    > #include <string.h>
    > int main(int argc,char *argv[])
    > {
    > char *a,*b;
    > int i,len;
    > len = strlen( argv[1] );
    > printf("strlen() [%d]\n",len);
    > for(i = 0; i < len ;i++ )
    > {
    > printf("%x ",(unsigned char)argv[1][i]);
    > }
    > printf("\n");
    > return 0;
    >


strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: