www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C unsigned char |->const unsigned char *


Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wie kann ich in C unsigned char in const unsigned char * wandeln?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> wie kann ich in C unsigned char in const unsigned char * wandeln?

unsigned char uc = 'a'

const unsigned char * cuc = &uc;

aber ACHTUNG, es ist nur ein Zeiger, es ist kein 0byte enthalten -> also 
auf keinem Fall einer Sting funktion übergeben.

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das teil will nicht, ich krieg die kriese.

unsigned char wert[]="FF"
unsigned char str1;
const unsigned char* uc;
long int zahl;
int Base=16;
uc=&str1;
zahl = strtol (uc,NULL,Base);
xputi(zahl);

void xputi (long int zz)
{
  xprintf("Zahl: %d \n", zz);
}

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi
wie wärs mit:
uc=&wert;
anstatt:
uc=&str1;

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
David schrieb:
> Das teil will nicht, ich krieg die kriese.

Nicht die Krise kriegen. Einfach keine Pointer benutzen, wenn gar keine 
notwendig sind.

> unsigned char wert[]="FF"

soweit so gut

> unsigned char str1;
> const unsigned char* uc;
> long int zahl;
> int Base=16;
> uc=&str1;

warum str1 ?
Dein string steht doch in wert!

  unsigned char wert[]="FF"
  long int zahl;

  zahl = strtol( wert, NULL, 16 );
  xputi(zahl);

oder, wenn manns ganz sauber machen will:
  unsigned char wert[]="FF"
  long int zahl;

  zahl = strtol( (char *)wert, NULL, 16 );
  xputi(zahl);

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht immer noch nicht, habe keine Haare mehr auf dem Kopf :-) sch... 
100%KA
Eigentlich lese ich aus einem

unsigned char Buff[16384] _attribute_ ((aligned (4))) ;

dann wird das Buff mit HEX werten gefüllt, z.B. 52 49 FF FE 0E FF 1F FF

Buff[0] gibt mir 52 zurück.

zahl = strtol ((char *)Buff[0],NULL,Base);
xputi(zahl);

Gibt ums verrecken immer 0 aus. :-(

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
David schrieb:
> dann wird das Buff mit HEX werten gefüllt, z.B. 52 49 FF FE 0E FF 1F FF
>
> Buff[0] gibt mir 52 zurück.

Weisst du eigentlich, was du tust?
Angenommen, du meinst 0x52 0x49 0xFF etc., dann wird Buff[0] nicht
52 sein, sondern hoffentlich 0x52.

Das wiederum ist ein großes 'R' in ASCII.
Ein String, der mit einem R beginnt, kann aber keine gültige Zahl
darstellen.
Was soll strtol() denn dann liefern?
Würde man ansehen, wo strtol() aufgehört hat zu konvertieren,
wüsste man den Fehler vermutlich gleich...

Dabei musst du noch froh, sein, daß strtol() gleich beim ersten
Zeichen scheitert. Schließlich hast du nirgends eine terminierende 0.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: KHB wird recht haben, du willst vermutlich nicht strtol()
benutzen.

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber wenn ich
char str1[]="AA";
habe geht es wunderbar. Dann bekomme ich den entsprechenden Int. Ich bin 
davon ausgegangen das es so auch geht.

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kann ich das dann machen? Vorschlag? :-)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"AA" kann (falls dein Base den Wert 16 hat) tatsächlich von
strtol() zu 0xAA konvertiert werden.

Es wäre recht hilfreich, einen genauen Quelltext zu sehen.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
David schrieb:
> Wie kann ich das dann machen? Vorschlag? :-)

sag doch erstmal was du genau machen willst, als daten hast du und in 
was müssen sie umgewandelt werden.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du schrust irgendwo oben:
> dann wird das Buff mit HEX werten gefüllt, z.B. 52 49 FF FE 0E FF 1F FF

Wie sieht das genau aus?
Hast du den Buffer initialisiert mit ... = "5249FF..." etc. oder
mit ... = { 0x52, 0x49, ... }?
Das isnd zwei grundverschiedene Dinge.

Ohne genauen Quelltext wird dir niemand helfen können, schon gar
nicht solange du nicht klar sagst, was los ist.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
David schrieb:
> Wie kann ich das dann machen? Vorschlag? :-)

sag doch erstmal was du genau vor hast. Was hast du als eingang, und was 
sol am ende Rauskommen. Am besten mit einen Beispiel (nicht 
Programmiert!)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spinnt das Forum, oder spinne ich?
Wenn ich einen BEitrag absende, finde ich ihn nicht;
schicke ich ihn nochmal ab ist er angeblich schon
"in der Datenbank". Aber offenbar nur dort, zu sehen ist er
nicht :-(

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter: da bin ich wohl nicht der einzige, der vom Forum veräppelt wird 
:-)

Autor: dev null (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  unsigned char wert[]="RRRRR"; // 0x52 0x52 0x52 0x52
  uint16_t zahl;

  zahl = (wert[0]) | (wert[1] << 8); // byte order checken!
  xputi(zahl);

Autor: dev null (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm doch einfach die Werte raus...
uint16_t meinint;

meinint = wert[0] | (wert[1] << 8); // endian???

Autor: dev null (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hä doppelmoppel sorry

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah, noch einer reingefallen!

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@David:
es bleibt dabei, bitte einen verwertbaren Quelltext, sonst
kann man hier lange im Morast stochern, ohne etwas zu finden.

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich verwende Chan Fatfs und der füllt den unsigned char Buff[16384] 
attribute ((aligned (4))) ;
mit
f_read(&File1, Buff, sizeof(Buff), &s2);

Mein Ziel ist es xkhz sound auszugeben(WAV), als ich den sound zum 
Ersten mal abgespielt habe war es furchtbar, sehr starkes rauschen und 
sehr leiser sound. Nach bischen studieren habe ich festgestellt das ich 
statt 8 16 bit abspielen muß, deshalb möchte ich es vor einer Operation 
in Int umwandeln und später mit laut Keil MCB2130 VoicePlayer
DA_val = ((sample >> 15) + 0x8000) & 0xFFFF; abspielen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, ich bin weg bis ich meine Glaskugel wieder gefunden habe.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
David schrieb:

> Nach bischen studieren habe ich festgestellt das ich
> statt 8 16 bit abspielen muß, deshalb möchte ich es vor einer Operation
> in Int umwandeln

D.h. deine Daten sind im Grunde schon int.
strtol ist ganz einfach das falsche Werkzeug dafür.

Meine Glaskugel sagt, dass du eigentlich 2 Bytes zu einem int 
zusammensetzen willst (aber was weiß denn die schon)

Beitrag "16 Bit Variable aus 2 8 Bit laden"


strtol benutzt man, wenn man einen String hat, wie zb "853", von dem man 
die entsprechende Zahl in numerischer Form benötigt.


Du solltest dir dringend ein C-Buch zulegen und es durcharbeiten. Deine 
Fragen sind allesamt von der Sorte: Zu finden im ersten Drittel eines 
jeden C-Lehrbuchs, lang bevor es wirklich schwierig wird. Ich will gar 
nicht wissen, welche Fauxpas da noch in deinem Code schlummern.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.