Int in Binär
-
Ich will eine Integer Variable in Binär-Code umwandeln.
z.B.: 4 in 0100 oder 0x0100
Gibt es da eine fertige Funktion?
-
Ich denke, du meinst, du willst die Zahl als Binär in einem String ausgeben, denn schliesslich ist ja die Zahl schon binär.
Umwandeln kannst du sie mit "sscanf". Wie genau kann ich jetzt nicht sagen, aber die Hilfe müsste dir deine Fragen beantworten.
-
Und der Ausdruck "0x0100" ist nicht binär sondern Hexadezimal und bedeutet so viel wie 256, nur mal so als Hinweis.
-
Du kannst es auch in ner FOR-Schleife lösen. Indem du von der dezimalen Zahl 128 abziehst, prüfst ob es größer gleich 0 ist -> wenn ja soll er ne 1 an die erste Stelle des String (bin) setzen und die 128 wirklich abziehen. Dann das gleiche mit 64, 32, 16, 8, 4, 2 und 1. Für diese Zahlen kannst ja die pow-Funktion nehmen. Das wars mit umrechnen.
Das wär jetzt der Lösungsvorschlag für ne 8-bit Zahl.
Mach den String am besten immer 1 Zeichen größer weil du brauchst noch das '\0' am Schluss, sonst kann es sein das er dir nach dem String noch irgendwelchen Müll ausgibt.
Hoffe ich konnte helfen
Gruß Ralf
-
Probier mal das hier (Hab ich in Delphi geschrieben, und in C++ übersetzt, kann also sein, das du irgendwo noch kleine Details ändern musst):
String IntToBin(int iDez, int iBit=8) { String sBin; // String, in den der Binaercode gespeichert wird int iZahl=1; // Runde Dualzahl (Fuer die Binaerwerte) int i; // Counter 1 int j; // Counter 2 for (i=0;i<iBit;i++) iZahl*=2; if (iDez>=iZahl) Application.MessageBox('Die Zahl ist größer als die angegebene Bitzahl.','Fehler',16); //Fehlerausgabe, wenn Wert zu gross ist else for (i=iBit;i>=0;i--) { iZahl=1; for (j=0;j<i;j++) iZahl*=2; if (iDez-iZahl>=0) { sBin=sBin+"1"; //Wenn Zahl-Dualzahl groessergleich 0, dann abziehen und '1' zum String addieren iDez-=iZahl; } else sBin=sBin+"0"; //Andernfalls '0' zum String addieren } return sBin; //String zurueckgeben }
-
schleifen, sscanf,...
habt ihr schon was von itoa() gehört?
char c[34]; itoa(4, c, 2); // binär // ergebnis in c ist "100" itoa(33, c, 16); // hexa // ergebnis in c ist "21"
-
Ach mann, immer diese C-Programmierer
-
Windoof schrieb:
Er wollte es aber in AnsiString haben.
ich lach mich tod... *rofl*
da du nicht weiss, wie man char* in AnsiString umwandelt, hier ein Bsp. Es ist etwas kompliziert, also nicht verzweifeln, wenn du es nicht gleich verstehst:
char cDoof[5] = "doof\0"; String sDoof = String(cDoof);
-
Xqgene schrieb:
Windoof schrieb:
Er wollte es aber in AnsiString haben.
Wo steht das? - Habs schließlich nach weniger als 1 min. wieder herausgenommen und was anderes hingeschrieben... Irren ist menschlich.
-
ist ja ok, akzeptiert und vergessen.