из восьмеричной в остальные. С++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by s_p_a_m, 15 May 2009.

  1. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    помогите с исходниками для программы перевода из восьмеричной системы исчеслениия в 16-ти, 10-ти и в двоичную систему ( Visual 2008 )
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    блин, тут на 5-10 минут дел, могбы и сам сделать. алгоримты простые. достаточно было просто подумать как это сделать
    Code:
    #include "stdafx.h"
    typedef unsigned long ULONG;
    
    ULONG OCT2DEC(ULONG i)
    {
     ULONG d=0;
     ULONG x=1;
     while (i)
     {
       d+=(i%10)*x;
       x*=8;
       i=i/10;
     }
     return d;
    }
    
    
    void OCT2HEX(ULONG i,char * outhex)
    {
     ULONG x,y;
     char mas[17]="0123456789ABCDEF";
     i=OCT2DEC(i);
     x=i;
     y=0;
     while (i) // ýòî ìû âû÷èñëèì äëèííó ïîëó÷àåìîé ñòðîêè
     {
      y++;
      i=i/16;
     }
     i=x;
     outhex[y]=0x00;
     while (i) // ýòî ìû âû÷èñëèì äëèííó ïîëó÷àåìîé ñòðîêè
     {
      outhex[--y]=mas[i%16];
      i=i/16;
     }
     return;
    }
    
    void OCT2BIN(ULONG i,char * outhex)
    {
     ULONG x,y;
     i=OCT2DEC(i);
     x=i;
     y=0;
     while (i) // ýòî ìû âû÷èñëèì äëèííó ïîëó÷àåìîé ñòðîêè
     {
      y++;
      i=i/2;
     }
     i=x;
     outhex[y]=0x00;
     while (i) 
     {
      if (i%2) outhex[--y]='1'; else outhex[--y]='0';
      i=i/2;
     }
     return;
    }
    
    
    int main(int argc, char* argv[])
    {
    	ULONG ret;
    	char buf[128];
        ret=OCT2DEC(42657);
     	printf("OCT 2 DEC = %i\n",ret);
    
    	OCT2HEX(42657,buf);
    	printf("OCT 2 HEX = %s\n",buf);
    
        OCT2BIN(42657,buf);
    	printf("OCT 2 BIN = %s\n",buf);
    	
    	return 0;
    }
    
    
    
     
    2 people like this.
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    ps. там где иероглифы прорисовались - это был коммент. что в этом месте я предварительно вычисляю длину данные которая должна получиться при конвертировании. Для примере везде конвертится число 42657
    сначало в 10-ю, затем в 16-ю а потом в 2-ю.
    Конверт в 16 и 2 происходит через предварительный конверт в 10-ю
     
  4. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    в С++ новичок, но в VS 2008 это не компилится :)
     
  5. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    2 Fata1ex а ты сам то пробовал ?
    <stdafx.h> <stdafx> "stdafx" не катит...
     
  6. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    я писал это в VC++ 6 Так что могут быть расхождения с VC++ 2008
    В 2008 это будет как
    Файл - Создать - Проект - Консольное приложение Win32
    Потом снять галочку "Предварительно скомпилированный модуль" и нажать Готово
    Вставить код этот код (удалив всё старое)
    и заменить
    int main(int argc, char* argv[])
    на
    int _tmain(int argc, _TCHAR* argv[])
     
  7. csrss

    csrss Member

    Joined:
    13 Apr 2009
    Messages:
    38
    Likes Received:
    38
    Reputations:
    4
    <stdafx.h> это стандартно генерируещийся хидер. когда новый проект создаёшь, отметь чтоб пустой был (Проект в смысле.).
     
    1 person likes this.
  8. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    Не удается открыть файл include: stdafx.h: No such file or directory
     
  9. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    жестокий у тя Си
    тогда просто тупо удаляй include stdafx.h
    и пиши
    #include <stdio.h>
    #include <stdlib.h>
    и ставь обратно
    int main(int argc, char* argv[])
     
  10. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    А где в этом коде строка которая считывает то что я ввожу 8-чное число ?
     
  11. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    а тут её нету )) Это я просто привел пример перекодирования в расчете на то, что ты хоть чутьчуть знаешь Си.
     
  12. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Глупо, из 8 в 16 и в 2 намного проще, чем из 10.
     
  13. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    и всетаки, может быть кто-то поможет с кодом? :) Только так чтобы закинул в VS и сразу скомпилил :)
     
  14. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    http://ru.wikipedia.org/wiki/Itoa_(%D0%A1%D0%B8)
     
  15. St0nX

    St0nX Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    Project->Properties->C\C++->Precompiled Header-> Create\Use Precompiled Header
    Выбрать не юзать и все должно норм компилится
     
  16. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Лол. А откуда он будет знать, что ты хочешь сделать: модуль для ядра или динамическую либу?

    Настрой проект под свои требования - и он скомпилит.
    А если нихрена не знаешь - то проси добрых дядей, чтобы тебе проект скинули. Или преподу заплати.