eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingjak zamienić string na hex?Re: jak zamienić string na hex?
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!newsb.icpnet.pl!
    not-for-mail
    From: "Grzegorz Niemirowski" <g...@p...onet.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: jak zamienić string na hex?
    Date: Tue, 6 Jul 2010 11:37:09 +0200
    Organization: ICP News Server
    Lines: 64
    Message-ID: <i0utg3$vf9$1@opal.icpnet.pl>
    References: <4c32dfc5$0$19170$65785112@news.neostrada.pl>
    NNTP-Posting-Host: riviera.nat.student.pw.edu.pl
    Mime-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=original
    Content-Transfer-Encoding: 8bit
    X-Trace: opal.icpnet.pl 1278409027 32233 194.29.137.1 (6 Jul 2010 09:37:07 GMT)
    X-Complaints-To: a...@i...pl
    NNTP-Posting-Date: Tue, 6 Jul 2010 09:37:07 +0000 (UTC)
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Newsreader: OE PowerTool 4.3
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5931
    X-WWW: http://www.grzegorz.net/
    Xref: news-archive.icm.edu.pl pl.comp.programming:185971
    [ ukryj 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: