Forum: Mikrocontroller und Digitale Elektronik Dezimal zu Binär - Was mache ich falsch?


von Jan H. (janiiix3)


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?

von Joe (Gast)


Lesenswert?

Wie rufst Du die Funktion auf? Ganzen Code posten.

von Jan H. (janiiix3)


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
}

von Peter D. (peda)


Lesenswert?

Jan H. schrieb:
> Benutze ich jetzt aber das "test[]" Array, funktioniert es wie
> gewünscht.

Nö.

Jan H. schrieb:
> for(; tempCnt > 0 ; tempCnt--)

D.h. es läuft von 7..1. Damit ist der Inhalt von buff[0] undefiniert.

Beitrag #5156482 wurde von einem Moderator gelöscht.
von Jan H. (janiiix3)


Lesenswert?

Peter D. schrieb:
> Jan H. schrieb:
>> Benutze ich jetzt aber das "test[]" Array, funktioniert es wie
>> gewünscht.
>
> Nö.
>
> Jan H. schrieb:
>> for(; tempCnt > 0 ; tempCnt--)
>
> D.h. es läuft von 7..1. Damit ist der Inhalt von buff[0] undefiniert.

Das war es. Perfekt! Vielen Dank.

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.
von Mampf unterwegs (Gast)


Lesenswert?

buff[0] wird nicht beschrieben :)

wenn buff mit 0 initialisiert wird und das 0te element nicht beschrieben 
wird, ist der string leer, da null terminiert

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.