eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingjak zamienić string na hex?Re: jak zamienić string na hex?
  • Data: 2010-07-06 09:37:09
    Temat: Re: jak zamienić string na hex?
    Od: "Grzegorz Niemirowski" <g...@p...onet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    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

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: