Binär umwandlung

Gast #1504326
Lesenswert?
• ▲
▼
Hallo

Ich habe folgendes Problem !

Ich verwende eine PIC 18f4550 und programmiere in MPlab(C).

Also ich habe folgende werte :

x[0];
x[1];
x[2];
x[3];
usw bis x[15];

Nun will ich diese werte in eine binär Zahl umwandeln und diese über die 
serielle Schnittstelle verschicken um damit weiterarbeiten zu können .


Also hat jmd eine Idee wie ich bei der umwandlung vorgehen kann ???

für hilfe wäre ich sehr dankbar !!

mfg Alex
Moderator (Firma: Titel) Persönliche Seite #1504402
Lesenswert?
• ▲
▼
> Also ich habe folgende werte :
Und da drin steht (quasi als String) z.B. die Zahlenfolge 
"0101110010101001"?
Was ist das MSB, was das LSB?

> Nun will ich diese werte in eine binär Zahl umwandeln
Diese Zahl ist (wenn MSB links und LSB rechts) binär 0101110010101001 
und das ist dezimal 23721. Und du willst dann also 2, 3, 7, 2, 1 über 
die SIO verschicken?
Gast #1504421
Lesenswert?
• ▲
▼
Senden:
1
int8_t i;
2
for(i = 0; i < 16; i++) {
3
    meine_sende_funktion_für_ein_zeichen(x[i] ? '1' : '0');
4
}
Zusammenführen:
1
int8_t i;
2
int16_t zahl;
3
for(i = 0; i < 16; i++) {
4
    zahl |= x[i];
5
    zahl <<= 1;
6
}

Hab ich dich jetzt richtig verstanden?
Gast #1504429
Lesenswert?
• ▲
▼
jop genau so sollte das funktionieren !!

Jedoch das senden wollte ich mit printf() realisiren ... aber das sollte 
nicht das problem darstellen ...

Aber vielen dank für die unterstützung!

mfg alex
#1504440
Lesenswert?
• ▲
▼
tobi schrieb:
> Senden:
>
1
> int8_t i;
2
> for(i = 0; i < 16; i++) {
3
>     meine_sende_funktion_für_ein_zeichen(x[i] ? '1' : '0');
4
> }
5
>
> Zusammenführen:
>
1
> int8_t i;
2
> int16_t zahl;
3
> for(i = 0; i < 16; i++) {
4
>     zahl |= x[i];
5
>     zahl <<= 1;
6
> }
7
>

So wird aber nach dem letzten Bit nochmal geshiftet!

In dieser Variante wird dagegen zu Anfang einmal überflüssigerweise 
geschoben, dafür das letzte Bit nicht mehr:
1
int8_t i;
2
int16_t zahl = 0;
3
for(i = 0; i < 16; i++) {
4
    zahl <<= 1;
5
    zahl |= x[i];
6
}

> ...
Gast #1504448
Lesenswert?
• ▲
▼
Noch ne frage ...

kann ich die selbe methode verwenden um auch größere zahlen 
zusammenzufügen ...zb 32 bit ?? klarerweiße muss i < 32 festgelegt 
werden ...

aber würde das prizipiell funktionieren ??

Antwort schreiben

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.

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.