Jaecko
11.03.2008, 17:23
Moin.
Bin gerade dabei, mit einem XE164 (Infineon) anzufangen. Als Compiler wird Keil mit C verwendet. Problem an der Sache ist nun, dass ich Registern Werte nur als Dezimalzahl oder per hex angeben kann; eine Angabe im Stil von x = &b00110100 geht nicht.
Ich habe darum eine function gebaut, die es über
x = bin2dec("00110100") doch ermöglicht (s.u.).
Da es bei 16-Bit-Zahlen aber leicht unübersichtlich wird, wollte ich es so machen, dass man in dem Bit-String Punkte als Trennzeichen einfügen kann:
x = bin2dec("0001.1001.0010.1001")
Nur scheiterts da nun am Entsorgen der Punkte.
Bisherige Suchen über Google etc brachten keine Ergebnisse, da die Beispiele (z.B. strtok) nicht funktionieren.
Hat hier jemand ne Idee dazu?
MfG
Bisheriger Code:
int bin2dec(char *bin)
// Converts a binary string into a decimal value
// e.g. to set control registers directly via single bits
{ int b, k, m, n;
int len, sum = 0;
len = strlen(bin) - 1; // determine length of binary value
for(k = 0; k <= len; k++)
{
n = (bin[k] - '0'); // char to numeric conversion
if ((n > 1) || (n < 0)) // If Bit neither 1 nor 0
{return (0);} // quit function and return 0
for(b = 1, m = len; m > k; m--)
{ b *= 2; } // 1 2 4 8 16 32 64 ... place-values, reversed here
sum = sum + n * b; // add all results
} return(sum); // return decimal value
}
Bin gerade dabei, mit einem XE164 (Infineon) anzufangen. Als Compiler wird Keil mit C verwendet. Problem an der Sache ist nun, dass ich Registern Werte nur als Dezimalzahl oder per hex angeben kann; eine Angabe im Stil von x = &b00110100 geht nicht.
Ich habe darum eine function gebaut, die es über
x = bin2dec("00110100") doch ermöglicht (s.u.).
Da es bei 16-Bit-Zahlen aber leicht unübersichtlich wird, wollte ich es so machen, dass man in dem Bit-String Punkte als Trennzeichen einfügen kann:
x = bin2dec("0001.1001.0010.1001")
Nur scheiterts da nun am Entsorgen der Punkte.
Bisherige Suchen über Google etc brachten keine Ergebnisse, da die Beispiele (z.B. strtok) nicht funktionieren.
Hat hier jemand ne Idee dazu?
MfG
Bisheriger Code:
int bin2dec(char *bin)
// Converts a binary string into a decimal value
// e.g. to set control registers directly via single bits
{ int b, k, m, n;
int len, sum = 0;
len = strlen(bin) - 1; // determine length of binary value
for(k = 0; k <= len; k++)
{
n = (bin[k] - '0'); // char to numeric conversion
if ((n > 1) || (n < 0)) // If Bit neither 1 nor 0
{return (0);} // quit function and return 0
for(b = 1, m = len; m > k; m--)
{ b *= 2; } // 1 2 4 8 16 32 64 ... place-values, reversed here
sum = sum + n * b; // add all results
} return(sum); // return decimal value
}