доброе время суток, почему первое склеивает строки, а второе нет? Код (Text): char buf[16]; char *p=buf; *p = 'a'; p++; *p = 'b'; p=buf; printf( "'%s' \n",buf); Код (Text): char buf[16]; char buf2[10]; char *p=buf; *p = buf2[3]; p++; *p = buf2[6]; p=buf; printf( "'%s' \n",buf); printf( "'%d' \n",buf); собственно нужно из файлика данные в хексе считать в 1 троку 2 байта, т.е. склеить 0x20 0xA8 в одно значение, а потом перевести в DEC.
ptl а 0 в конце строки кто ставить будет? > printf( "'%d' \n",buf); вам покажет адрес этого самого buf в десятичном знаковом виде. чтобы сделать > т.е. склеить 0x20 0xA8 в одно значение, а потом перевести в DEC надо WORD temp = *(WORD*)buf; // (c) Asterix но лучше DWORD temp = 0xffff & *(DWORD*)buf; // поскольку printf в стек забрасывает дворды
ptl WORD buff; fread(&buff, sizeof(buff), 1, fin); зачем читать как текст а потом кастить в другой тип ?
osox локальные переменные не обнуляются при выделении. и когда пушаются - верхнее слово не обнуляется тоже, вроде.
чтобы не быть голословным Код (Text): .text:004010B8 xor eax, eax .text:004010BA lea ecx, [esp+4Ch+var_3C] .text:004010BE mov ax, [ebp+0] .text:004010C2 mov [esp+4Ch+var_3C], 0 .text:004010C7 push eax .text:004010C8 push offset aU ; "%u" .text:004010CD push offset aS04x ; "%s%04x" .text:004010D2 push ecx ; LPSTR .text:004010D3 call ebx ; wsprintfA
странно, но если я делаю вот так, то в итоге вижу только то что было в buf2[3], после сдвига на байт ничего невидно. Код (Text): char buf[16]; char buf2[10]; fread(buf2,sizeof(char),10,File); char *p=buf; *p = buf2[3]; p++; *p = buf2[6]; p=buf; printf( "'%x' \n",*(char*)buf);
Asterix гм, проверил и по вашему варианту и по варианту osox, действительно все обнуляется нормально.. к чему бы это? (или это уже паранойя пошла видеть возможность ошибки кругом? закончу это - возьму перекур на недельку, посмотрю есть ли вокруг люди или уже одни марсиане)
ptl странно, что вам странно. вы выводите что? первый (0вой) байт вашего буфа. а равен он чему? и чего вы хотите? все работает как вы написали, хотя не лучшее решение
но в отдельности из buf2[3] и buf2[6] я вижу правильные данные т.е. пр printf("%x%x\n",buf2[3],buf2[6]);
хм, тогда как объединить 2 значения в хекс в одно? что-бы можно было юзать это как одно число? buf2[3] тут 0х05 buf2[6] а тут 0хА6 объединить в 0х5А6
ptl у вас в буфере уже лежат два байта, очевидно что осталось вывести их на экран printf( "%04x\n",*(unsigned short*)buf);