nixp.ru v3.0

20 октября 2017,
пятница,
10:01:54 MSK

DevOps с компанией «Флант»
Аватар пользователя Steck
Steck написал 26 февраля 2006 года в 16:25 (346 просмотров) Ведет себя как мужчина; открыл 124 темы в форуме, оставил 549 комментариев на сайте.

Народ есть такой код..

#include
main()
{
                                char *d="Hello";
                                char *Str="";
                                int i;
                                for(i=0;i
                                Str=g_strdup_printf("%s%02X",Str,d[i]);
                                printf(Str);
печатает
48656C6C6F
}

Как мне получить из этого «48656C6C6F» снова строку

«Hello»

??

Uncle Theodore

Суровый у тебя стиль, батенька… :-)

Ну, если минимально изменить твой код, то вот так, например

#include
main()
{
                                char *d="Hello";
                                char *Str="";
                                char Out[strlen(d)];
                                int i;
                                for(i=0;i
                                Str=g_strdup_printf("%s%02X",Str,d[i]);
                                printf(Str);
                                printf("\n");
                                for(i=0;i
                                sscanf(Str+2*i,"%2X",Out+i);
                                printf(Out);
                                printf("\n");
}

Good Luck,

UT

rgo
Uncle Theodore
Суровый у тебя стиль, батенька… :-)

Ну, если минимально изменить твой код, то вот так, например


нуууу. стиль не выдержан ;). Должен быть дополнительный memleak из `strlen (d) — 1\′ блоков, суммарным размером минимум `size * (size + 1) / 2; where size = strlen (d)'

А если забить на эти тонкости, то лучше, наверное, так:

#include 
int main ()
{
        char *d = "Hello";
        char *Str;
        char *Out;
        int i;
        Str = (char*) malloc (strlen (d) * 2 + 1);
        for (i = 0; i < strlen (d); i ++)
                sprintf (&Str[2*i], "%02X", d[i]);
        printf ("Туда: `%s'\n", Str);
        Out = (char*) malloc (strlen (Str) / 2 + 1);
        for (i = 0; i < strlen (Str) / 2; i ++)
                sscanf (&Str[2*i], "%2X", &Out[i]);
        
        printf ("И обратно: `%s'\n", Out);
        free (Str);
        free (Out);
        return 0;
}
Steck

Оно вертится тьфу блин,

работает!

Спасибо всем. )

P.S а стиль у меня нормальный просто что-то vim странно глюкнул

в этот раз (o;

Steck

Опять проблем блин )

есть две функии

char *decode(char *src, int len)
{
            char *Out=NULL;
            int i;
            Out = (char*) malloc (len/2 );
            for(i=0; i < (len/2); i++)
            {
//                        printf("OCT %s\n",&src[2*i]);
                        sscanf(&src[2*i],"%2X",&Out[i]);
            }
            return Out;
}

В функию подается строка вида

«041F044004380432043504420020043A0430043A002004340435043B0430»

(«Привет как дела») и ее длинна

На одну букву приходится 4 символа..

После этой функции печатется эта строчка.

Но вот в чем проблема печатется только слово до первого пробела…все что после 0020 не выводится..

Если строка приходит без пробелов и любой длинны то отображается верно..

Запарился уже . пробывал все варианты а результат..(