Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Dezimalzahl -> Dualzahl

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]
010
16.08.2004, 14:07 Uhr
GERO



sorry... aber ich hab im mom keinen plan wie das hinkriegen soll... vielleicht könnt ihr mir ja mal ein paar tipps geben wie ich das ganze anfangen könnte... ich dachte mir halt, das ich zuerst die ip eingebenlass... also jeden einzelnen teil nacheinander zuerst ip[0] dann ip[1]... u.s.w. dann möchte ich die einzelnen teile in den binärcode umwandeln, und in ip_du[0], ip_du[1], ... u.s.w. speichern... danach - was jetzt aber noch nicht so wichtig ist - will ich das subnetz etc. mit dem binärcode berechnen und zur ausgabe wieder in den dezimalcode umwandeln... das wichtige ist jetzt im mom allerdings die umwandlung von der "dezimal IP" in die "dual IP"(natürlich ein 8stelliger binärcode pro IP Teil... :-) )...

Gruß GERO

Dieser Post wurde am 16.08.2004 um 14:09 Uhr von GERO editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
16.08.2004, 15:06 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


müsste so gehen wie ich gepostet habe
ungetestet so

C++:
void binaer_ausgeben(unsigned int zahl){
for(int i=8*sizeof(unsigned int);i;--i)
    printf("%d",(zahl>>(i-1))&1);
}


int main(){
int ip,tmp[4];
printf("Bitte geben Sie die gewünschte IP in der Form ein a.b.c.d ein:\n");
if(4!=scanf("%d.%d.%d.%d",tmp,&tmp[1],&tmp[2],&tmp[3])){printf("Du dummer Linuxer\n"); return 0;}
ip=*tmp<<24|tmp[1]<<16|tmp[2]<<8|tmp[3];
binaer_ausgeben(ip);
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
16.08.2004, 16:36 Uhr
0xdeadbeef
Gott
(Operator)


Ich würd in C ja so hingehen:

C++:
char ip_string[] = "1.2.3.4";
unsigned o[4];
uint32_t ip;

sscanf(ip_string, "%u.%u.%u.%u". &o[0], &o[1]. &o[2], &o[3]);

assert(o[0] < 256 && o[1] < 256 && o[2] < 256 && o[3] < 256);

ip = o[0] << 24 | o[1] << 16 | o[2] << 8 | o[3];


In C++ halt mit ner Stringstream-Konstruktion oder so, obwohl man da eigentlich auch der Einfachheit halber den C-compatibility-Kram benutzen kann.
[changelog]
* fix stupid typo
[/changelog]


Bearbeitung:

uint32_t ist ggf. je nach Plattform entsprechend zu typedeffen - im Moment dürfte das auf den gängigen Plattformen unsigned int sein. Wahrscheinlich hat das OS auch irgendwo nen Header, in dem solche Typen definiert sind; unter Linux zum Beispiel:

C++:
#include <linux/types.h>

/* ... */

uint32_t foo; /* <-- schon vordefiniert */


Wie das unter Windoze aussieht, weiß ich aber nicht.


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 16.08.2004 um 16:46 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
16.08.2004, 16:51 Uhr
GERO



@ windalf
bis zum Ende der If-Anweisung kapiere ich das ja schon, aber was bedeutet:
"ip=*tmp<<24|tmp[1]<<16|tmp[2]<<8|tmp[3];" sowas hab ich noch nie gesehn... außerdem hab ich in der Funktion binaer_ausgeben die printf-Anweisung net gerafft.... kann man das alles vielleicht auch in c++ schreiben, den bei C blick ich mit printf; scanf u.s.w. nicht so gut durch wie bei c++... trotzdem danke...

vielleicht kann das ja jemand in c++ "übersetzten"...


ansonsten, möchte ich halt, das die binaer_ausgeben Funktion eher eine binaer_urechnugs Funktion wird, also eine dezimalzahl übergeben und eine dual zahl zurückgegeben wird... bis jetzt wird ja nur die dual-zahl auf dem bildschirm ausgegeben und nirgends gespeichert

GrußGERO
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
16.08.2004, 16:56 Uhr
virtual
Sexiest Bit alive
(Operator)


@GERO
Im ganzen thread is nicht ein einiziges Stück Source von Dir zu sehen, der zeigen würde, daß Du schon mal probiert hättest, selbst Deinen Popo zu bewegen. Ich denke aus den bisherigen Posts sollte der Grundlegende Algorithmus klar sein, so daß du vielleicht jetzt mal dran bist und es probierst. Kann ja falsch sein, was du machst, aber meinerseits bekommst du nur Hilfe, wenn ein mindestmaß an eigeninitiative sichtbar wird.

@beefy
Was soll das mit dem Assert, wenn Du eh unsicheren Code schreibst?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
16.08.2004, 17:01 Uhr
RHBaum




Zitat:

Microsoft Specific —>

Microsoft C/C++ features support for sized integer types. You can declare 8-, 16-, 32-, or 64-bit integer variables by using the __intn type specifier, where n is 8, 16, 32, or 64.



um Posix (ist uint32_t unter posix definiert ??? ) zu emulieren kannst so typedefen:
typdef unsigned __int32 uint32_t;

Wenn das mal ned schmutzig ist :-)

oder gleich so hernehmen
unsigned __int32 foo;

@Windalf
Heee, da nutzt er schon templates, verwendet iostreams .... aber nutzt mega poese C-Casts.
<mit dem Rohrstock auf den Tisch hau !!! >

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
16.08.2004, 17:07 Uhr
0xdeadbeef
Gott
(Operator)


Ja, ja, ja, schon klar. Im echten Leben würd man snprintf benutzen.

...und den Rückgabewert checken.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 16.08.2004 um 17:08 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
16.08.2004, 17:12 Uhr
virtual
Sexiest Bit alive
(Operator)


@RHBaum
Bei einem C Compiler, der konform zu C99 ist, nimmst Du einfach den Header stdint.h. Dann hast Du all solche schönen Dinge wie
int8_t
...
int64_t
uint8_t
...
uint64_t

Und viele mehr
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
16.08.2004, 17:19 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

@Windalf
Heee, da nutzt er schon templates, verwendet iostreams .... aber nutzt mega poese C-Casts.
<mit dem Rohrstock auf den Tisch hau !!! >


das liegt ganz einfach daran das sich klammer auf typ klammer zu schmeller schreibt als static_cast....

@gero
zahlen werden immer dual (also mit nullen und einsen intern im rechner gespeichert) du musst die also nicht mehr extra irgendwo speichern... wäre ziemlich sinnlos...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 16.08.2004 um 17:20 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
16.08.2004, 17:23 Uhr
RHBaum




Zitat von virtual:
@RHBaum
Bei einem C Compiler, der konform zu C99 ist


Anmerkung: ich bezog mich eigentlich konkret auf windows und M$ Visual C++ 6.0

Meiner kennt stdint.h, was aber wohl daran liegt, das ich boost installiert hab ...

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: