Dezimal zu Binär - Was mache ich falsch?

OP #5156468
Lesenswert?

GuMo,
1
char *decBin(unsigned char dec, char *buff)
2
{
3
  unsigned char tempCnt = 7;
4
  unsigned char msk = 0x80;
5
  
6
  unsigned char test[8];
7
  
8
  for(; tempCnt > 0 ; tempCnt--)
9
  {
10
    if(dec & msk)
11
      buff[tempCnt] = '1';
12
    else
13
      buff[tempCnt] = '0';
14
    
15
    msk>>=1;  
16
  }
17
  buff[8] = '\0';
18
  
19
  printf("Result = %s",buff);
20
  return buff;
21
}

Wenn ich das mit dem PC simuliere, bekomme ich nichts zurück außer 
"Result = ".
Benutze ich jetzt aber das "test[]" Array, funktioniert es wie 
gewünscht. Was ist verkehrt?
OP #5156478
Lesenswert?

Joe schrieb:
> Wie rufst Du die Funktion auf? Ganzen Code posten.
1
typedef char*(*calcFuncPtr)(unsigned char, char []);
2

3
char *decHex(unsigned char dec, char buff[]);
4
char *decBcd(unsigned char dec, char buff[]);
5
char *decBin(unsigned char dec, char *buff);
6

7

8
char *decHex(unsigned char dec, char buff[])
9
{  
10
  /* hex char set */
11
  char hexchars[] = "0123456789ABCDEF";
12
    buff[0] = '0';  
13
     buff[1] = 'x';   
14
    buff[2] = hexchars[dec >> 12 & 0xF];    
15
    buff[3] = hexchars[dec >>  8 & 0xF];     
16
    buff[4] = hexchars[dec >>  4 & 0xF];          
17
    buff[5] = hexchars[dec       & 0xF];
18
  
19
    return buff;
20
}
21

22
char *decBcd(unsigned char dec, char buff[])
23
{  
24
  buff[0] = '0';
25
  buff[1] = 'x';
26

27
  buff[2] = (dec / 10)+'0';
28
  buff[3] = (dec % 10)+'0';
29

30
  return buff;
31
}
32

33
char *decBin(unsigned char dec, char *buff)
34
{
35
  unsigned char tempCnt = 7;
36
  unsigned char msk = 0x80;
37
  
38
  unsigned char test[8];
39
  
40
  for(; tempCnt > 0 ; tempCnt--)
41
  {
42
    if(dec & msk)
43
      buff[tempCnt] = '1';
44
    else
45
      buff[tempCnt] = '0';
46
    
47
    msk>>=1;  
48
  }
49
  buff[8] = '\0';
50
  
51
  printf("Result = %s",buff);
52
  return buff;
53
}
54

55
typedef struct
56
{
57
  calcFuncPtr  decHex;
58
  calcFuncPtr  decBcd;
59
  calcFuncPtr  decBin;
60
}conv_t;
61

62
conv_t Convert ={
63
  .decHex = decHex,
64
  .decBcd = decBcd,
65
  .decBin = decBin,
66
};
67

68
int main(int argc, char *argv[]) 
69
{
70
  char buff[9] = "";
71
  
72
  printf("%s",Convert.decBin(0x80,buff));
73
  return 0;
74
}
Beitrag #5156482 wurde von einem Moderator gelöscht.
Beitrag #5156485 wurde von einem Moderator gelöscht.
Beitrag #5156487 wurde von einem Moderator gelöscht.
Beitrag #5156489 wurde von einem Moderator gelöscht.
Beitrag #5156528 wurde von einem Moderator gelöscht.
Beitrag #5156625 wurde von einem Moderator gelöscht.

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