This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Hex To Character Conversion Problem

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

Parents
  • What's not proper mean?

    1. The values you are storing in arr[] are not char, they are small unsigned integers, so arr[] should be defined as:
      unsigned char arr[10];
      
    2. Your HEX character generation seems a little awkward.
      void puthex(unsigned char b) {
          putchar("0123456789ABCDEF"[b]);
      }
      
      for( i=0; i<10; i++) {
          puthex(arr[i] >> 4);
          puthex(arr[i] & 0xF);
      }
      

Reply
  • What's not proper mean?

    1. The values you are storing in arr[] are not char, they are small unsigned integers, so arr[] should be defined as:
      unsigned char arr[10];
      
    2. Your HEX character generation seems a little awkward.
      void puthex(unsigned char b) {
          putchar("0123456789ABCDEF"[b]);
      }
      
      for( i=0; i<10; i++) {
          puthex(arr[i] >> 4);
          puthex(arr[i] & 0xF);
      }
      

Children