I am Trying to Split a hexa value and read it over the serial port let me show you what i mean by that :
<per> char arr[10]=(0); int i,k,l;
arr[0]=0x11; arr[1]=0x12; : : arr[7]=0x59; arr[8]=0x5F; arr[9]=0x90;
for(i=0;i<10;i++) { k=(arr[i]/0x10)>0x09?(arr[i]/0x10)+55:(arr[i]/0x10)+48; l=(arr[i]%0x10)>0x09?(arr[i]%0x10)+55:(arr[i]%0x10)+48; putchar(k); putchar(l); }
</per>
I am Getting Proper out put for values which are below 90 ie 1A or 2F or 44 or 39 but when value becomes 90 or 91 or A1 i am not getting proper out put. I just cant locate my mistake. Please Tell me where i am going wrong.
Thank You. Ajay
From your formatting, I can clearly see that this was aimed at me (<per>...</per>) :)
First of all: Stylistically, you should not use magic constants. Don't write 48 if you mean '0'. Don't write 55 if you mean 'A'-10.
Second: Don't do extra divisions, if you don't need to:
k = a[i] >= 0xA0 ? (a[i]>>4)+'A'-10 : (a[i]>>4)+'0';
Third: Don't assume that a character is signed. If you declare your array: unsigned char arr[10]; it will work a lot better.
Fourth: Don't first perform a zero-assign of the array, just to follow it later with individual assignments.
Either write:
unsigned char arr[10]; arr[7] = 0x59;
or write
unsigned char arr[10] = { 0x11,0x12,...,0x59,0x5f,0x90 };
Remember that even if the average compilers gets smarter every day, there are still stupid compilers in existence out in the wild ;)