Funktion zum Bits extrahieren

Gast #2523979
Lesenswert?

Kann mir bitte jemand bei folgender Aufgabenstellung helfen:

Zu erstellen ist eine Funktion, die je nachdem welche Bitkombination auf 
den ersten beiden Bits vorliegt, unterschiedliche Teile eines 
8-bit-Datenwortes extrahiert.

BIT 0-1            Funktionswert
00                 0-Fehler
11                 0-Fehler
01                 unteren 4 Bits (Bits 0-3)
10                 oberen 4 Bits (Bits 4-7)

Das 8-Bit-Datenwort, ist als globaler Parameter zu definieren. Die 
Funktion liefert das Ergebnis als Funktionswert zurück

reslult = get();

Meine ersten Versuche:
1
#include <stdio.h>
2

3
unsigned char data = 0xEE; //Eingabe des 8-Bit-Datenwortes in HEX-Form
4

5
/******************************************************************************/
6
unsigned char get()
7
{
8
        
9
 if(data & 0x01)
10
 {
11
  return data = data << 4;
12
 }
13
 
14
 else if(data & 0x02)
15
 {
16
  return data = data >> 4;
17
 }
18
 
19
 else
20
 {
21
  return 0;
22
 }
23
 
24
}
25

26
void test_1()
27
{
28
 unsigned char erg;
29
 
30
 if(erg = get())
31
 {
32
  printf("0x%X\n\n", erg);      
33
 }  
34
 else
35
 {
36
  printf("error\n\n");
37
 }  
38
 
39
}
40
/******************************************************************************/
41

42
int main(void)
43
{ 
44
 test_1();   
45
      
46
 system ("pause");
47
 
48
 return 0;
49
}
Die Aufgabenstellung 11 funktioniert noch nicht. Wie kann ich diese 
lösen?

VIELEN DANK!
Gast #2524023
Lesenswert?

Das ist aber nicht reines C oder?

Folgende Umsetzung, sollte funktionieren!?
1
#include <stdio.h>
2

3
unsigned char data = 0x55; //Eingabe des 8-Bit-Datenwortes in HEX-Form
4

5
/******************************************************************************/
6
unsigned char get()
7
{
8
  
9
 if((data & 0x03) == 0x03)
10
 {
11
  return 0;
12
 }
13
       
14
 if(data & 0x01)
15
 {
16
  return data << 4;
17
 }
18
 
19
 else if(data & 0x02)
20
 {
21
  return data >> 4;
22
 }
23
 
24
 else
25
 {
26
  return 0;
27
 }
28
 
29
}
30

31
void test_1()
32
{
33
 unsigned char erg;
34
 
35
 if(erg = get())
36
 {
37
  printf("0x%X\n\n", erg);      
38
 }  
39
 else
40
 {
41
  printf("error\n\n");
42
 }  
43
 
44
}
45
/******************************************************************************/
46

47
int main(void)
48
{ 
49
 test_1();   
50
      
51
 system ("pause");
52
 
53
 return 0;
54
}
Gast #2524438
Lesenswert?

so würde ich das wahrscheinlich schreiben
1
unsigned char data = 0xEE; //Eingabe des 8-Bit-Datenwortes in HEX-Form
2

3
/******************************************************************************/
4

5
char get()
6
{
7
    char ret = 0;
8

9
// BIT 0-1            Funktionswert
10
// 00                 0-Fehler
11
// 11                 0-Fehler
12
// 01                 unteren 4 Bits (Bits 0-3)
13
// 10                 oberen 4 Bits (Bits 4-7)
14

15
    switch(data & 0x03) {
16
        case 0x01:
17
            ret = data & 0x0F;
18
            break;
19
        case 0x02:
20
            ret = data >> 4;
21
            break;
22
        default:
23
            break;           
24
    }
25

26
    return ret;
27
}
#2524679
Lesenswert?

Stimmt, da hatte ich nen Denkfehler bei der Maskierung der Bits -.-

Aber warum extra Variable?
1
char get()
2
{
3

4
// BIT 0-1            Funktionswert
5
// 00                 0-Fehler
6
// 11                 0-Fehler
7
// 01                 unteren 4 Bits (Bits 0-3)
8
// 10                 oberen 4 Bits (Bits 4-7)
9

10
    switch(data & 0x03) {
11
        case 0x01:
12
            return data & 0x0F;
13
            
14
        case 0x02:
15
            return data >> 4;
16
           
17
        default:
18
            return 0;          
19
    }
20

21
    
22
}

wobei man sich das break dann auch sparen kann

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren