Die Mathe-Redaktion - 26.01.2020 12:17 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte / Top 15
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
Listenpunkt? im neuen Schwätz
ListenpunktWerde Mathe-Millionär!
ListenpunktAward-Abstimmung ab 1.1.
ListenpunktFormeleditor fedgeo
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 727 Gäste und 24 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » int in char bzw. char arrays
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule int in char bzw. char arrays
mast
Junior Letzter Besuch: in der letzten Woche
Dabei seit: 02.11.2019
Mitteilungen: 20
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2019-12-07


Hallo!

Ich versuche gerade ein char Array mit int zu befüllen, allerdings schaffe ich es nicht wirklich meine int in char umzuwandeln. Die int sind übrigens entweder 0 oder 1.

Ich bitte um Hilfe!
LG
C
char* dec2bin(int n){
	int i;
	char c;
	int tmp;
	char* bin=malloc(16*sizeof(char)+1);
	assert(bin!=NULL);
 
	for(i=0;i<16;i++){
 
		tmp=n%2;
		n=n/2;
		c=(char)tmp;
		bin[i]=c;
 
		if(n==0){
			bin[i+1]='\0';
			return bin;
		}
	}
}



  Profil  Quote  Link auf diesen Beitrag Link
StrgAltEntf
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 19.01.2013
Mitteilungen: 5425
Aus: Milchstraße
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2019-12-07


Hallo mast,

was klappt denn bei deinem programm nicht?

Soll der Rückgabewert die Binärdarstellung von n als Zeichenstring enthalten? Dann darfst du nicht 0 oder 1 zuweisen, sondern '0' oder '1'.



  Profil  Quote  Link auf diesen Beitrag Link
rlk
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 10644
Aus: Wien
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, eingetragen 2019-12-07


Hallo mast,
ich vermute, dass Du die Ziffern 0 und 1 in das char array bin einfügen willst, Dein Programm verwendet stattdessen Zeichen mit den Codes 0 und 1. Ersterer passt nicht zu der Konvention, strings mit \0 abzuschließen.

Welches bit der Zahl n wird in bin[0] gespeichert?

Servus,
Roland

[Die Antwort wurde vor Beitrag No.1 begonnen.]

[Verschoben aus Forum 'Informatik' in Forum 'Programmieren' von rlk]



  Profil  Quote  Link auf diesen Beitrag Link
mast
Junior Letzter Besuch: in der letzten Woche
Dabei seit: 02.11.2019
Mitteilungen: 20
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2019-12-07


Danke für die rasche Hilfe!

Habs jetzt umgeändert, dass '0' und '1' eingespeichert werden, statt den int.

LG



  Profil  Quote  Link auf diesen Beitrag Link
StrgAltEntf
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 19.01.2013
Mitteilungen: 5425
Aus: Milchstraße
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, eingetragen 2019-12-07


Innerhalb einer Funktion Speicherplatz zu allokieren und dann einen Pointer auf diesen Speicherplatz zurückzugeben, ist übrigens ganz schlechter Programmierstil. (Stell dir vor, diese Funktion wird ein paar Millionen mal aufgerufen.)



  Profil  Quote  Link auf diesen Beitrag Link
rlk
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 10644
Aus: Wien
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2019-12-07


Hallo mast,
noch ein Hinweis zu Deiner Bemerkung
2019-12-07 13:42 - mast in Beitrag No. 3 schreibt:
Habs jetzt umgeändert, dass '0' und '1' eingespeichert werden, statt den int.
Auch im ursprünglichen Programm wurden Werte des Typs char gespeichert, nur die Werte waren unterschiedlich.

Servus,
Roland



  Profil  Quote  Link auf diesen Beitrag Link
AlphaSigma
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 23.11.2012
Mitteilungen: 170
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, eingetragen 2019-12-07


Hallo mast,

die Variable tmp vom Typ int in Deinem Programm ist 0 oder 1. Mit "(char) tmp" wird das aber nicht in die Zeichen '0' oder '1' gewandelt, sondern tmp wird von int (typischerweise 32 Bit) auf char (typischerweise 8 Bit) gewandelt.
Musst Du bin umbedingt als Funktionswert zurück geben? In Deinem Programm wird das niederwertigste Bit 0 in bin[0] gespeichert, d.h. bei Ausgabe als string in der Reihenfolge bin[0], bin[1], ... ganz links. Soll das so sein?
Damit das Programm portabel ist, ist es besser die Größe von bin mittels sizeof(int) und CHAR_BIT aus limits.h festzulegen.

Hier mal meine Version, wobei bin als char[] Array in main definiert wird und als Argument an int2bin übergeben wird.
C
/* int2bin.c */
 
#include <stdio.h>
#include <limits.h>
 
void int2bin(int n, char bin[], int dim) {
    int i;
 
    for (i = 0; i < dim; i++) {
        if (n % 2)
            bin[dim-1-i] = '1';
        else
            bin[dim-1-i] = '0';
        n /= 2;
    }
}
 
int main(void) {
    int dim = sizeof(int) * CHAR_BIT;
    int n;
    char bin[dim+1];
 
    bin[dim] = '\0';
 
    for (n = 1; n < INT_MAX/4; n *= 2) {
        int2bin(n, bin, dim);
        printf("%12d  %s\n", n, bin);
    }
 
    return 0;
}
           1  00000000000000000000000000000001
           2  00000000000000000000000000000010
           4  00000000000000000000000000000100
           8  00000000000000000000000000001000
          16  00000000000000000000000000010000
          32  00000000000000000000000000100000
          64  00000000000000000000000001000000
         128  00000000000000000000000010000000
         256  00000000000000000000000100000000
         512  00000000000000000000001000000000
        1024  00000000000000000000010000000000
        2048  00000000000000000000100000000000
        4096  00000000000000000001000000000000
        8192  00000000000000000010000000000000
       16384  00000000000000000100000000000000
       32768  00000000000000001000000000000000
       65536  00000000000000010000000000000000
      131072  00000000000000100000000000000000
      262144  00000000000001000000000000000000
      524288  00000000000010000000000000000000
     1048576  00000000000100000000000000000000
     2097152  00000000001000000000000000000000
     4194304  00000000010000000000000000000000
     8388608  00000000100000000000000000000000
    16777216  00000001000000000000000000000000
    33554432  00000010000000000000000000000000
    67108864  00000100000000000000000000000000
   134217728  00001000000000000000000000000000
   268435456  00010000000000000000000000000000



  Profil  Quote  Link auf diesen Beitrag Link
mast hat die Antworten auf ihre/seine Frage gesehen.
mast hatte hier bereits selbst das Ok-Häkchen gesetzt.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2019 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]