![Smile :)](./images/smilies/icon_e_smile.gif)
I wan to write a function using C for convert 8bit dip switch values to BCD.
As I think dip switch value is binary.
I coded some function.But,It's binary to decimal.
![Sad :(](./images/smilies/icon_e_sad.gif)
I tried with "itoa" function.No valuable result.
![Crying or Very Sad :cry:](./images/smilies/icon_cry.gif)
Please anyone help me.
Code: Select all
unsigned int bcd2i(unsigned int bcd) {
unsigned int decimalMultiplier = 1;
unsigned int digit;
unsigned int i = 0;
while (bcd > 0) {
digit = bcd & 0xF;
i += digit * decimalMultiplier;
decimalMultiplier *= 10;
bcd >>= 4;
}
return i;
}
Code: Select all
unsigned int i2bcd(unsigned int i) {
unsigned int binaryShift = 1;
unsigned int digit;
unsigned int bcd = 0;
while (i > 0) {
digit = i % 10;
bcd += (digit << binaryShift);
binaryShift += 4;
i /= 10;
}
return bcd;
}
Code: Select all
unsigned int i2bcd(unsigned int bits[]) {
unsigned int i=0;
unsigned int pos_val=0;
unsigned int dec=0;
unsigned int binaryShift = 1;
unsigned int digit;
unsigned int bcd = 0;
for(i=0;i<7;i++)//i have 8bit binary
{
pos_val=bits[i];//get Nth bit(0 or 1)
dec+=pow(2,i)*pos_val;//calculate Nth decimal value and add to total
}
//Saman's part
while (dec > 0) {
digit = dec % 10;
bcd += (digit << binaryShift);
binaryShift += 4;
dec /= 10;
}
return bcd;
}
Code: Select all
while (i > 0) {
digit = i % 10;//1
bcd += (digit << binaryShift);//2
binaryShift += 4;//3
i /= 10;//4
}
Code: Select all
#define GET_BCD_VALUE(position,pointer) \
{ char* __get_bcd_value_pointer;\
__get_bcd_value_pointer = (char*)(pointer) +(position)/2; \
(( position)%2 ) ? (( *__get_bcd_value_pointer )<<4)>>4 : (*__get_bcd_value_pointer)>>4 ;\
}
#define SET_BCD_VALUE(position,pointer,value) \
{ char* _set_bcd_value_pointer );\
__set_bcd_value_pointer = (char*) (pointer) +(position)/2 ; \
((position)%2) ? ((*__set_bcd_value_pointer) =|(value)<<4 ):(*__set_bcd_value_pointer) =| (value);\
}
Code: Select all
unsigned int i2bcd(unsigned int i) {
unsigned int binaryShift = 1;
unsigned int digit;
unsigned int bcd = 0;
while (i > 0) {
digit = i % 10;
bcd += (digit << binaryShift);
binaryShift += 4;
i /= 10;
}
return bcd;
}
BCD is about representing each digit of a decimal number in a nibble (4-bits).I think this is stupid problem..
Why 26 bit ? Cant represent more than 26 bit numbers ?A 26-bit number can be represented with 4 bytes.
226 - 1 = 67108863