- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 6 von 6

Thema: Umwandlung 32 bit in Dezimalzahl

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.05.2011
    Beiträge
    7

    Umwandlung 32 bit in Dezimalzahl

    Anzeige

    Powerstation Test
    Hallo Leute ich brauch einen Tipp oder Hinweis bei einem C - Programm.
    Ich habe den Inhalt von vier Registeradressen von 4 x 8 bit nach 32 bit konvertiert
    (hoffe ich doch !!) Nun möchte ich den Inhalt von 32 bit in eine Dezimalzahl umwandeln
    und über printf ausgeben. Ich brauche ein Beispiel oder Hinweise für die Umwandlung 32
    bit in Dezimalzahl.

    Im voraus schon mal Herzlichen Dank für Eure Mühe LOWOJ


    typedef union
    {
    unsigned long as_long ;
    unsigned char as_byte[4];
    } data32_t;

    data32_t zaehler;
    zaehler.as_long ;
    zaehler.as_byte[0] = 0x02;zaehler.as_byte[1] = 0x03;zaehler.as_byte[2]=0x04; zaehler.as_byte[3] = 0x05;

    printf("Zaehler :%u\n",zaehler);

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    Zitat Zitat von Lowoj Beitrag anzeigen
    Umwandlung 32 bit in Dezimalzahl
    Evtl. mal suchen nach Standardfunktionen wie z.B. itoa() "integer to ascii", damit man's auf einem Display anzeigen lassen kann.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Die Konvertierung Binärzahl -> Dezimalstring macht printf selbst, du musst allerdings zaehler.as_long übergeben statt zaheler.
    Das was du mit dem Union machst nennt sich übrigens type-punning. Unions sind eigentlich NICHT dafür ausgelegt (der C-Standard garantiert dir NICHT dass der Union das tut was du von ihm erwartest), zumindest für den GCC gibt es aber eine entsprechende Aussage in der Dokumentation die das gewünschte Verhalten zusichert.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    26.05.2011
    Beiträge
    7
    Hallo RoboHolIC danke für deinen Hinweis. Habe mich eingelesen, konnte mein Problem mit itoa() nicht lösen. Bekomme immer eine statische Zahl angezeigt ( 4199543 ) ich nehme an das mir die Bits angezeigt
    werden. Ich möchte aber vier Register a. ein Byte zu 32 Byte zusammen führen und über printf anzeigen lassen. Drehimpulsgeber eines E-Motors.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    26.05.2011
    Beiträge
    7
    Hallo Markus danke für deine hilfe. Habe es mit der übergabe von zaehler.as_long versucht. Bekomme aber nur eine statische Zahl als anzeige ( 4199543 ) ich nehme an das mir die Bits angezeigt werden.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    @Lowoj:
    Zwei Dinge, die mir auf- bzw. eingefallen sind:
    a) Ich hab's nicht so mit C, dein Code würde mir also nicht viel sagen, aber deine konstante Integerzahl riecht nach Adresse der 32bit-Variable oder schiefem Pointer oder so.
    b) Statt per Union könnte man die 32bit-Zahl auch durch Addition der gewichteten Bytewerte darstellen:
    32Bit-Zahl = 256^3*MostSignificantByte + 256^2*(zweithöchstes Byte) + 256^1(zweitniedrigstes Byte) + LeastSignificantByte.
    Ich hoffedenkemeine, daß man damit auf der sicheren Seite sein müßte.
    c) vielleicht heißt der passende Befehl auch utoa(), u für unsigned. Beschreibe doch mal eine 32bit-Variable mit einer fixen Dezimalzahl und verwurste sie mit den Standardfunktionen, bis ebendiese Dezimalzahl am Schirm erscheint. Danach kannst du dich der Zusammenführung der Bytes widmen. Also möglichst nur an _einer_ Baustelle arbeiten.
    d) Reihenfolge der Werte im Array invertieren, vielleicht stimmt dort etwas nicht. Dabei nur _ein_ Byte ungleich Null setzen, damit man's besser nachvollziehen kann.

Ähnliche Themen

  1. Dezimalzahl via I2C/TWI übertragen?
    Von Teslafan im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 15.01.2012, 15:05
  2. Dezimalzahl in ihre Ziffern zerteilen
    Von IchKG im Forum PIC Controller
    Antworten: 12
    Letzter Beitrag: 05.05.2008, 21:47
  3. Dezimalzahl in Dualzal umwandeln
    Von elkokiller im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 04.01.2008, 18:35
  4. Dezimalzahl auf LCD ausgeben
    Von DarkFire im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 08.10.2006, 14:24
  5. 16F877A printf Dezimalzahl?
    Von RoboLeo im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 07.11.2005, 07:35

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen