char in integer

OP #1370783
Lesenswert?
• ▲
▼
Hallo Leute,

hat einer eine Idee wie ich ein unsigned char in ein integer umwandeln 
kann.

Ich möchte folgendes tun:
In einem unsigned char ist folgendes Bitmuster enthalten 00010001.

Wie kann ich das am besten in ein integer umwandeln welches 11 enthält.

Hab schon einwenig rumprobiert und versucht im Forum eine Lösung zu 
finden, aber kein Ergebniss bis jetzt. Vielleicht habt ihr eine Idee.

Gruß Andreas
Gast #1370788
Lesenswert?
• ▲
▼
> hat einer eine Idee wie ich ein unsigned char in ein integer umwandeln
> kann.
1
unsigned char c;
2
int i;
3
i = c;

> Ich möchte folgendes tun:
> In einem unsigned char ist folgendes Bitmuster enthalten 00010001.
>
> Wie kann ich das am besten in ein integer umwandeln welches 11 enthält.

Warum sollte das denn 11 enthalten?
OP #1370843
Lesenswert?
• ▲
▼
Hall leute,

ich habe das Programm von Rolf ausprobiert und irgendetwas macht mir da 
einen Strich durch die Rechnung.

Mein Programm sieht folgendermaßen aus:
1
int test,b;
2
unsigned char ucResult;
3
unsigned char a = 0b00010001;
4
char tMSG_Buffer[20];
5

6
for (b = 0; b < 8; b++)
7
{
8
  ucResult <<= 1;  /* shift in data byte */
9

10
  if (PIND & (1 << PIND1)){
11
    ucResult = 1;
12
    Qttemp[i] = '1';
13
  }
14
  else{
15
    ucResult = 0;
16
    Qttemp[i] = '0';
17
  }
18
  i++;
19
}
20

21
test = ucResult;
22
sprintf(tMSG_Buffer, "\n\r%d\n\r",test);
23
at128_sys_func_uart_write_string(tMSG_Buffer);
24

25
test = a;
26
sprintf(tMSG_Buffer, "\n\r%d\n\r",test);
27
at128_sys_func_uart_write_string(tMSG_Buffer);
28

29
sprintf(tMSG_Buffer, "\n\r");
30
at128_sys_func_uart_write_string(tMSG_Buffer);
31

32
return 0;

Ergebnis:

1
17

Warum wird mir erst 1 und dann 17 ausgegeben? Bin eigentlich sicher das 
in ucResult das gleiche drin steht.
Wie kann ich mir das bitmuster von ucResult schnellstmöglich ausgeben 
lassen?
Gast #1370852
Lesenswert?
• ▲
▼
> Bin eigentlich sicher das
> in ucResult das gleiche drin steht.
Ich nicht.

for (b = 0; b < 8; b++)
{
  ucResult <<= 1;  /* shift in data byte */

  if (PIND & (1 << PIND1)){
    ucResult = 1;
    Qttemp[i] = '1';
  }
  else{
    ucResult = 0;
    Qttemp[i] = '0';
  }
  i++;
}

darasu folgt doch das in ucResult nur eine 0 oder eine 1 stehen kann
OP #1370880
Lesenswert?
• ▲
▼
Du hast ja recht. Mein Fehler.

Richtig muss es ja heißen:
1
for (b = 0; b < 8; b++)
2
{
3
  ucResult <<= 1;  /* shift in data byte */
4

5
  if (PIND & (1 << PIND1)){
6
    ucResult |= 1;
7
    Qttemp[i] = '1';
8
  }
9
  else{
10
    ucResult |= 0;
11
    Qttemp[i] = '0';
12
  }
13
  i++;
14
}

Dann gibt der auch 17 aus.

Danke euch für den Denkanstoß.
#1370922
Lesenswert?
• ▲
▼
Andreas Müller schrieb:
> Mal noch ne neue Frage. Wo wir gerade beisammen sind.
>
> Wenn ich dieses unsigned char in zwei teile teilen möchte wie machich
> das am besten.
>
> Beispiel:
>
> unsigned char a = 0b01110111;
> unsigned char b, c;
>
> teilen in b = 00000111 und c = 00000111
>
> Habt ihr da eine Idee?

b = ( a >> 4 ) & 0xFF;   // die obere Hälfte
c = a & 0xFF;            // die untere Hälfte
#1370957
Lesenswert?
• ▲
▼
Erzähl dochmal, was das ganze überhaupt soll.


Intern rechnet die CPU immer binär.
Hinschreiben kann man in C Zahlen dezimal, oktal oder hexadezimal.

Ausgegeben werden Zahlen in ASCII (Text-LCD) oder 7-Segment.

Ein packed BCD braucht man daher nirgends und macht sich mit der 
Konvertiererei nur selber das Leben schwer.

Laß es einfach den C-Compiler so machen, wie es ihm am besten paßt.


Peter

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.