Převod z desítkové do dvojkové soustavy

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#16 Příspěvek od lesana87 »

Psal jsi, že to chceš zobrazit v terminálu, máš rovnou napsat, že chceš string, se kterým budeš dál pracovat. Když se neumíš pořádně vyžvejknout, co potřebuješ, nemůžeš čekat hned nějaké geniální odpovědi.

Jazyk C neumí přímo pracovat s řetězcema, takže "to chce naucit se " + "C" tam fakt nejde, ale v knihovně string.h existuje funkce strcat().

Nicméně proč to dělat složitě, když to jde jednoduše:

Kód: Vybrat vše

void byte_to_bin(unsigned char a, char *str)
{
	char b;

	for (b = 0b10000000; b > 0; b >>= 1) {
		*str++ = a & b ? '1' : '0';
	}
	str = '\0';
}

void main(void)
{

	unsigned char a;
	char str[9];

	a = 253;
	byte_to_bin(a, str);
	printf(str);
}

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#17 Příspěvek od AB1 »

Kód: Vybrat vše

řetěz =řetěz + "1" 

tak mně to nevezme kde dělám chybu?
To je zápis v Basicu.

Když chceš dělat s řetězci v C, tak napiš do guglu "řetězcové funkce v C"
Dostaneš třeba toto
http://www.sallyx.org/sally/c/c19.php

Kód: Vybrat vše

#include <string.h>
char retez[10];
...
strcat(retez, "1");

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#18 Příspěvek od markoni »

lesana87 píše:
Nicméně proč to dělat složitě, když to jde jednoduše:

Kód: Vybrat vše

void byte_to_bin(unsigned char a, char *str)
{
	char b;

	for (b = 0b10000000; b > 0; b >>= 1) {
		*str++ = a & b ? '1' : '0';
	}
	str = '\0';
}

void main(void)
{

	unsigned char a;
	char str[9];

	a = 253;
	byte_to_bin(a, str);
	printf(str);
}
toto jsem potřeboval ale jak ještě to rozšířit na 16 bitů ? protože s čidla DS18b20 leze 16 bitů. díky
Přílohy
simulace DS18b20.jpg
(188.21 KiB) Staženo 97 x

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#19 Příspěvek od lesana87 »

A nudli si utřeš sám? :roll:

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#20 Příspěvek od markoni »

Nepomůžeš mi kde ještě dělám chybu ? předem díky

Kód: Vybrat vše

 void byte_to_bin(unsigned short a, unsigned short *str)
{
   unsigned  short b;

   for (b = 0b10000000; b > 0; b >>= 1) {
      *str++ = a & b ? '1' : '0';
   }
   *str = '\0';
}
už jsem našel online emulátor PMD 85 v jeho basicu G mě to funguje
Přílohy
DecToBin.jpg
(236.01 KiB) Staženo 55 x

Uživatelský avatar
rnbw
Příspěvky: 32312
Registrován: 21 bře 2006, 01:00
Bydliště: Bratislava

#21 Příspěvek od rnbw »

Viac by sa ti hodil kompilator C.

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#22 Příspěvek od lesana87 »

A taky nějaká knížka o C, třeba The C Programming Language od Kernighana a Ritchieho.

petrfilipi
Příspěvky: 2551
Registrován: 13 zář 2005, 02:00

#23 Příspěvek od petrfilipi »

Mrkni sem: http://stackoverflow.com/questions/7911 ... -to-binary

Co se týče 1820 (nevím, zdali je to stejné i pro 18B20, 18S20, ...), tak na to mají v MikroC přímo příklad: https://download.mikroe.com/documents/c ... ibrary.htm

A pak taky mají knihovnu řešení tady: https://libstock.mikroe.com/.
Nějaké příklady na 1820 i 18B20 tam jsou.

Petr

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#24 Příspěvek od markoni »

Díky za typy ale pořád nemohu dosáhnout aby ve virtuálním terminálu bylo zobrazeno "1111111111111111" reprezentující číslo 65535,číslo 255 se zobrazuje "11111111" kde může být chyba? díky

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#25 Příspěvek od Atlan »

Zeby preto ze char je 8bitovy.

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#26 Příspěvek od markoni »

Zkoušel jsem i

Kód: Vybrat vše

 unsigned short    
a nepomáhá :oops: :oops:

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#27 Příspěvek od lesana87 »

Jestli to nebude tím, že unsigned short je taky 8 bitů.

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#28 Příspěvek od markoni »

Jé já myslel že 16 bitů největší hodnota 65535 dec ,tak jaký datový typ je potřeba?díky

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#29 Příspěvek od lesana87 »


Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#30 Příspěvek od markoni »

Tak to mě je to už jasné ,v C plaťí každá ves jiný pes !!!!

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“