PDA

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


s_p_a_m
15.05.2009, 19:34
помогите с исходниками для программы перевода из восьмеричной системы исчеслениия в 16-ти, 10-ти и в двоичную систему ( Visual 2008 )

slesh
15.05.2009, 20:28
блин, тут на 5-10 минут дел, могбы и сам сделать. алгоримты простые. достаточно было просто подумать как это сделать

#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;
}

slesh
15.05.2009, 20:32
ps. там где иероглифы прорисовались - это был коммент. что в этом месте я предварительно вычисляю длину данные которая должна получиться при конвертировании. Для примере везде конвертится число 42657
сначало в 10-ю, затем в 16-ю а потом в 2-ю.
Конверт в 16 и 2 происходит через предварительный конверт в 10-ю

s_p_a_m
15.05.2009, 20:38
в С++ новичок, но в VS 2008 это не компилится :)

s_p_a_m
15.05.2009, 20:46
2 Fata1ex а ты сам то пробовал ?
<stdafx.h> <stdafx> "stdafx" не катит...

slesh
15.05.2009, 20:52
я писал это в VC++ 6 Так что могут быть расхождения с VC++ 2008
В 2008 это будет как
Файл - Создать - Проект - Консольное приложение Win32
Потом снять галочку "Предварительно скомпилированный модуль" и нажать Готово
Вставить код этот код (удалив всё старое)
и заменить
int main(int argc, char* argv[])
на
int _tmain(int argc, _TCHAR* argv[])

csrss
15.05.2009, 20:53
<stdafx.h> это стандартно генерируещийся хидер. когда новый проект создаёшь, отметь чтоб пустой был (Проект в смысле.).

s_p_a_m
15.05.2009, 21:01
Не удается открыть файл include: stdafx.h: No such file or directory

slesh
15.05.2009, 21:05
жестокий у тя Си
тогда просто тупо удаляй include stdafx.h
и пиши
#include <stdio.h>
#include <stdlib.h>
и ставь обратно
int main(int argc, char* argv[])

s_p_a_m
15.05.2009, 21:18
А где в этом коде строка которая считывает то что я ввожу 8-чное число ?

slesh
15.05.2009, 21:23
а тут её нету )) Это я просто привел пример перекодирования в расчете на то, что ты хоть чутьчуть знаешь Си.

nerezus
15.05.2009, 23:26
Конверт в 16 и 2 происходит через предварительный конверт в 10-ю Глупо, из 8 в 16 и в 2 намного проще, чем из 10.

s_p_a_m
16.05.2009, 11:37
и всетаки, может быть кто-то поможет с кодом? :) Только так чтобы закинул в VS и сразу скомпилил :)

Fata1ex
16.05.2009, 18:19
http://ru.wikipedia.org/wiki/Itoa_(%D0%A1%D0%B8)

St0nX
16.05.2009, 18:27
Project->Properties->C\C++->Precompiled Header-> Create\Use Precompiled Header
Выбрать не юзать и все должно норм компилится

nerezus
16.05.2009, 19:02
Только так чтобы закинул в VS и сразу скомпилил Лол. А откуда он будет знать, что ты хочешь сделать: модуль для ядра или динамическую либу?

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