Portál AbcLinuxu, 9. května 2025 21:43

Dotaz: [C] program na prevod dec -> hex

martin() avatar 11.9.2009 20:34 martin() | skóre: 6 | Prievidza / Bratislava
[C] program na prevod dec -> hex
Přečteno: 1994×
Odpovědět | Admin
Dobry den, snazim sa napisat program, ktory ako vstup zoberie integer a na obrazovku vypise hex. Zatial som vyprodukoval toto:
#include <stdio.h>

char *string_hexnum(int number)
{
	char mask[] = "0123456789ABCDEF";
	char str[12];
	int i = 10;

	str[11] = '\0';

	if (number < 0){
		puts("ERROR: number is negative\n");
		return 0;
	}

	if (number == 0){
		str[i--] = '0';
	} else {
		while (number != 0){
			str[i--] = mask[number % 16];
			number /= 16;
		}
	}
	str[i--] = 'x';
	str[i] = '0';

	return str+i;
}


void print_hexnum(int number)
{
	char* pnt;
	puts("test");
	pnt = string_hexnum(number);
	puts(pnt);
	puts("test");
}


int main(void)
{
	print_hexnum(888);

	return 0;
}
Problemom je, ze sa to cislo nevypise, zostane prazdny riadok. Nechcem na to pouzit ziadnu funkciu z kniznice. Ked som to debuggoval, tak som videl, ze do pamete sa vsetko uklada ako ma. pnt ukazuje na prvy znak retazca - '0'.

Dakujem.
Hovor múdro, nepriateľ načúva ! -- S. J. Lec --

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (martin() (tazatel))
11.9.2009 20:51 ams
Rozbalit Rozbalit vše Re: [C] program na prevod dec -> hex
Odpovědět | | Sbalit | Link | Blokovat | Admin

Chyba je v tom, ze vracite odkaz na lokalni promennou str. Bud pouzijte malloc/free, anebo zmente deklaraci char str[12] na static char str[12]. Pak to ovsem nebude fungovat v multithread programech, ale to, tusim, ani nechcete :)

Řešení 1× (martin() (tazatel))
11.9.2009 20:53 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: [C] program na prevod dec -> hex
Odpovědět | | Sbalit | Link | Blokovat | Admin
return str+i;
Nemůžete vracet ukazatel na lokální proměnnou - jakékoliv další volání funkce zásobník přepíše. V lepším případě to nebude fungovat, v horším případě to upadne.
I am always ready to learn although I do not always like to be taught. (W. Churchill)
martin() avatar 11.9.2009 21:06 martin() | skóre: 6 | Prievidza / Bratislava
Rozbalit Rozbalit vše Re: [C] program na prevod dec -> hex
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dakujem za reakcie, zas som sa naucil nieco nove ;-)

Eclipse mi vyhodil warning, ze vraciam adresu lokalnej premennej, ale uspesne som to ignoroval.

Este raz dakujem.
Hovor múdro, nepriateľ načúva ! -- S. J. Lec --
Pavel Stárek avatar 11.9.2009 21:32 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: [C] program na prevod dec -> hex
Odpovědět | | Sbalit | Link | Blokovat | Admin
To byla nějaká školní úloha se zákazem používat knihovní funkce a funkce pro formátování výstupu? Mě z toho zadání vyšlo toto:
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
  unsigned long iCislo;
  
  if (argc > 1) {
    iCislo = atoi(argv[1]);
    printf("Cislo %s je hexa: 0x%X\n", argv[1], iCislo);
    return(0);
  }
  printf("Malo parametru!\n");
  return(1);
} 
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
martin() avatar 11.9.2009 22:00 martin() | skóre: 6 | Prievidza / Bratislava
Rozbalit Rozbalit vše Re: [C] program na prevod dec -> hex
Nie. Povedal som si, ze naprogramujem funkciu, ktora bude vypisovat cisla v hex. So skolou to nemalo nic spolocne.
Hovor múdro, nepriateľ načúva ! -- S. J. Lec --
14.9.2009 13:49 l4m4
Rozbalit Rozbalit vše Re: [C] program na prevod dec -> hex
Rozhodl-li ses takovou funkci naprogramovat, tak ji naprogramuj a nenech ji za sebe programovat jiné.

Pokud takovou funkci pouze potřebuješ, tak bych vzhledem k tomu, že vstup decimálních čísel a výpis hexadecimálních jsou operace, u kterých lze čekat, že už je někdo naprogramoval před dvaceti lety a dal do standardní knihovny, čekal spíš otázku na to, kterou knihovní funkci k tomu použít než jak to naprogramovat.
15.9.2009 08:27 dark
Rozbalit Rozbalit vše Re: [C] program na prevod dec -> hex

Sak ji naprogramoval a nefungovala mu, tak se zeptal, nic spatneho na tom nevidim.

15.9.2009 09:35 Ash | skóre: 53
Rozbalit Rozbalit vše Re: [C] program na prevod dec -> hex
Však l4m4 jen shrnul a potvrdil co bylo už v zásadě řečeno.
14.9.2009 12:05 dark
Rozbalit Rozbalit vše Re: [C] program na prevod dec -> hex

Nevim, jestli je 2x rozumne pouzit %X na 'unsigned long'.

14.9.2009 13:52 l4m4
Rozbalit Rozbalit vše Re: [C] program na prevod dec -> hex
Když už používáš ten long jako typ dat, tak používej odpovídající funkce...
printf("%lx\n", atol(argv[1]));
         ^         ^
A return není funkce.
Pavel Stárek avatar 15.9.2009 16:49 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: [C] program na prevod dec -> hex
Nojo, nojo, to byl jen takový rychlý pokus. Spíš pro ukázání, že takovéto funkce není třeba programovat, neboli netřeba vynalézat kolo. :-) Já céčko moc nepoužívám, já raději Python.
Kdo chce, hledá způsob; kdo nechce, hledá důvod.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.