String to long integer

Gast #1211942
Grüße Euch.
Ich habe folgendes Problem:

Gegeben ist :
char ausgabe[7];
Dahinter verbirgt sich ein String!!! z.B. 9999999


Nun möchte ich den String 9999999 in unsigned long integer umwandeln.
Wäre es so richtig ???

Wie sieht denn die Variable var aus ?
1
#include <stdlib.h>
2

3
char ausgabe[7];
4
unsigned long var;
5

6
var=atol(ausgabe);

Gruß Heiko
Gast #1211956
Guck sie dir doch im Debugger an. äh !!!

'atol' ist übrigens auch fast tot, nimm lieber 'strtol', das ist 
flexibler und du kannst Fehler abfangen.
Gast #1211961
ok.

vielleicht sollte ich das ganze Problem schildern.

Ich möchte also den String :

char ausgabe[7];

als hex ausgeben:

Weiß jemand wie ich das ohne print_f hinbekomme???

Gruß
#1211964
Heiko wrote:
> ok.
>
> vielleicht sollte ich das ganze Problem schildern.
>
> Ich möchte also den String :
>
> char ausgabe[7];
>
> als hex ausgeben:

Jetzt wirds völlig unverständlich.

Wenn du einen String hast (also einen Text), dann gibt man den 'in Hex' 
aus, indem man für jedes Zeichen den ASCII Code in Hex ausgibt.

Wie da jetzt strtol oder atol oder überhaupt unsigned long ins Spiel 
kommt, ist nicht wirklich einsichtig.
Gast #1211968
Nun ja,

ich habe einen String und folgenden Code:
char ausgabe[7];
1
unsigned long my_val = 2000;
2
signed int i;
3
char digit;
4

5
for (i = 28; i >= 0; i -= 4)
6
{
7
    digit = (my_val >> i) & 0x0000000f;
8
    digit = (digit > 9) ? (digit + 'A' - 10) : (digit + '0');
9
    send_char (digit); // z.B. Ausgabe auf UART
10
}

Ich wollte also den String ausgabe in long integer konvertieren.
Dann den long integer wert umwandeln und als hex ausgeben.

Mache ich da einen groben Fehler ?
Gast #1211995
Hallo KArl.

Jetzt bin ich aber bißchen durcheinander...
ultoa wandelt doch einen unsigned long integer zu einem String oder???
ich habe aber einen String und möchte daraus ein hex machen...
Ich kann da leider keinen Zusammenhang sehen...


Gruß
Gast #1212012
Jetzt versehe ich nichts mehr...

Ich habe folgendes:
1
char ausgabe[7];  // z.B. 9999999
2
unsigned long var;
jetzt wandle ich den String in long interger um
1
var=atol(ausgabe);
habe also in var den Wert 9999999 also long integer.

Warum kann das jetzt nicht klappen ?
1
unsigned long var;
2
signed int i;
3
char digit;
4

5
for (i = 28; i >= 0; i -= 4)
6
{
7
    digit = (var >> i) & 0x0000000f;
8
    digit = (digit > 9) ? (digit + 'A' - 10) : (digit + '0');
9
    send_char (digit); // z.B. Ausgabe auf UART
10
}

Bin ich denn zu doof dazu ?
#1212023
Heiko wrote:
> Jetzt versehe ich nichts mehr...
Da bist Du nicht der einzige!

> char ausgabe[7];  // z.B. 9999999
Das ist kein String. Erstens wäre es "9999999". Zweitens ist String in C 
immer nullterminiert, also passt "9999999" gar nicht in ein Array mit 7 
Elementen hinein. Du brauchst mindestens 8. "9999999" ist nämlich
1
{'9', '9', '9', '9', '9', '9', '9', '\0'}

> unsigned long var;
> [/c]
> jetzt wandle ich den String in long interger um
>
1
> var=atol(ausgabe);
2
>
> habe also in var den Wert 9999999 also long integer.
Nur, wenn Du Glück hast und in der an den Originalstring anschließenden 
Stelle eine 0 steht. Falls nicht, kommt Müll raus.

> Bin ich denn zu doof dazu ?
Du bist möglicherweise einfach nur "zu doof", Dein Problem Schritt für 
Schritt so zu erläutern, dass andere das auch verstehen.
Gast #1212024
in
    char ausgabe[7];  // z.B. 9999999

paßt nur 999999, dann kommt '\0' wenn es ein ASCII-String ist.
Nach
   var=atol(ausgabe);

steht dann 0x000F423F drin.

Der Rest ist dann so i.O.

Die Ausgabe sollte dann so aussehen: "00F423F" auf dem Terminal (?)

Oder täusche ich mich da so sehr?


Blackbird
#1212028
Heiko wrote:
> Hallo KArl.
>
> Jetzt bin ich aber bißchen durcheinander...
> ultoa wandelt doch einen unsigned long integer zu einem String oder???

Ja und?
Du kannst angeben, in welchem Zahlensystem die Ausgabe gemacht wird.

> ich habe aber einen String und möchte daraus ein hex machen...

Du hast keinen String, den du zu einem Hex machen willst.
Du schmeisst ständig 2 Schritte durcheinander.

* Zunächst mal generierst du dir mit atol (oder strtol) einen unsigned 
long, der der 'Zahl' in deinem String entspricht.
* Und dann sagst du ultoa es soll daraus wieder eine 
Stringrepräsentierung machen, aber diesmal zur Basis 16 (also Hex)

  char Buffer[20] = "99999";
  unsigned long Value;

  Value = atol( Buffer );
  ultoa( Buffer, Value, 16 );

  lcd_puts( Buffer );
Gast #1212045
OK.

Danke für Eure Hilfe. Ich glaube ich muß mich da noch etwas
einarbeiten. Bis heute abend sage ich bescheid ob es geklappt hat.

Danke erstmal
Heiko
#1212047
Heiko wrote:
> Hallo Urs.
>
> Die Feldgröße [7] passt doch allemal für eine 7 Stellige Zahl.
>
> Verstehe ich nicht. Wie meinst Du das?

Jetzt gehst du, nein du läufst, ganz schnell in die nächste Buchhandlung 
und besorgst dir ein Grundlagenbuch über C. Es ist mir völlig 
unverständlich, wie man eine Programmiersprache ohne vernünftge 
Unterlagen lernen können möchte.
Gast #1212074
Hallo Karl.

Erstmal wollte ich dir sagen :

Es hat so geklappt, wie du beschrieben hast...
1
char Buffer[20];
2
unsigned long Value;
3
Value=atol(ausgabe);
4
ultoa(Value,Buffer,16);
5

6
lcd_puts( Buffer );

Danke nochmal.

Zweitens das mit dem Buch ist keine schlechte Idee.
Habe bis jetzt nicht vernünftiges im Internet gefunden (Script)

Vielen Dank noch mal
und bis zum nöchsten Mal!

Heiko
#1212089
Heiko wrote:

> Zweitens das mit dem Buch ist keine schlechte Idee.
> Habe bis jetzt nicht vernünftiges im Internet gefunden (Script)

Von Internet halt ich nicht viel.
Bücher sollten aus Papier sein. Da kann man dann auch Notizen dazu 
anbringen, sich PostIt an wichtige Seiten kleben und abends im Bett noch 
mal ein Kapitel schmöckern. Nicht zu vergessen, dass das Buch wie 
selbstverständlich bei den ersten Versuchen neben dem Montor liegt und 
zur Hand genommen wird, um den letzten Abschnitt noch mal zu lesen und 
mit dem Code am Monitor zu vergleichen. Und wenn man ein Buch vor Wur 
mal an die Wand pfeffert, ist auch nichts verloren :-)

Wenn du deine erste Sprache so einigermassen beherrscht, gehts auch mit 
Internet-Online-Tutorien. Aber bis dorthin ist ein physisches Buch durch 
nichts zu schlagen. Ausser vielleicht durch einen 2.ten Mann, der mit 
dir dasselbe Buch durchrackert ....

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.