LINUX.ORG.RU

Это задача из школьного эказмена по информатике за 9 класс.

anonymous
()
Ответ на: комментарий от anonymous

У этой функции нет флага для бинарного представления.

hlkjg
() автор топика

Я не понял задачу. Преобразовать char* в int, при условии что в char* шестнадцатиричное представление числа? Тогда sscanf (c89), strtol (c99) или написать эти пять строчек кода руками.

kim-roader ★★
()
a2b(a,char** b){
   int l=0,t=0;t=a;
   while(t>0){l++;t/=2;}
   b=maloc(t);
   char * p=*b+t-1;
   *p=0;
   t=a;
   while(a>0){
      p--;*p=*("0123456789ABCDEF"+a%16);a/=16;
   }
}
qulinxao ★★☆
()
Ответ на: комментарий от invy

так что-ли?

#define HIHEX(h) (h >> (sizeof(unsigned) * 8 - 4))&0xf

char* h2b(unsigned h, char *b)
{
	char *lt[] = { "0000", "0001", "0010", "0011", 
                    "0100", "0101", "0110", "0111", 
                    "1000", "1001", "1010", "1011", 
                    "1100", "1101", "1110", "1111" };
	int i = 0;
	int j = 0;
	while(!HIHEX(h))
		h <<= 4;
	while(h) {
		for(j = 0; j < 4; ++j)
			b[i++] = lt[HIHEX(h)][j];
		h <<= 4;
	}
	return b;
}

int main()
{
	char b[32] = "";
	unsigned h = 0xFFABC01;
	printf("in: %x, out res: %s\n", h, h2b(h, b));
}

invy ★★★★★
()
Ответ на: комментарий от anonymous

эээ да вы чего itoa же умеет конвертить в bin

нестандартная функция, gcc под линуксом обругает

vaino
()
Ответ на: комментарий от qulinxao

По идее, нужно

-    while(t>0){l++;t/=2;}
+    while(t>0){l++;t/=16;}
Т.к. в противном случае строка выделится в 3 раза больше, а её начало будет забито мусором или нулями.

vzzo ★★★
()
Ответ на: комментарий от vzzo

топик стартер «ленив» - так что исходный сырец отличная пища для изучения языка при доказыванию преподователю что указаный сырец делает ровно то что задано.

qulinxao ★★☆
()
Ответ на: комментарий от anonymous

ну он не стандарнтый и не умеет так (это допустим если мне калькулятор свой модный написать приспичит) :)

in: 1fabc01, out res: 00000001111110101011110000000001
in: 1fabc01, out res: 0000 0001 1111 1010 1011 1100 0000 0001 
in: 1fabc01, out res: 0001 1111 1010 1011 1100 0000 0001 
in: 1fabc01, out res: 1 1111 1010 1011 1100 0000 0001

invy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.