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

printf problem for integers > 32767

I am using printf function to send data to serial port. The mcu has to send a number which may be upto 65535.

But for numbers larger than 32767, I was getting negative numbers. To test it I wrote following code

        unsigned int i;
        for(i=32760;i<=32770;i++)
                printf("%d\n", i);    //printf ("char %bd int %d long %ld\n",a,b,c);

What I was getting in VB application is


32760
32761
32762
32763
32764
32765
32766
32767
-32768
-32767
-32766

So I tried the same program in Pelles C for Windows . The result was perfect.


32760
32761
32762
32763
32764
32765
32766
32767
32768
32769
32770
Press any key to continue...

Can somebody tell me what is wrong here?

Parents
  • Dear Per Westermark, you are literally reading my mind, as if you were here. I just downloaded printf documentation from byuh.doncolton.com/.../printf.pdf and trying to study the formatting strings.

    This is not the first time I have searched for the printf documentation :(

    Sorry, I am new to C, just started to code in keil, previously I was using assembly, and finishing my projects somehow. AND I MUST ACCEPT THAT IT WAS ONLY POSSIBLE BECAUSE OF YOU PEOPLE.

    Instead of "%d\n", I had also tried

    const unsigned char code crlf[3] = {0x0d, 0x0a, 0x00};
    printf("%d%s", i,crlf);

    I thought it may not be a Keil-specific issue, but as I did not have any problem in Pelles C, I asked here. Please help!!!

Reply
  • Dear Per Westermark, you are literally reading my mind, as if you were here. I just downloaded printf documentation from byuh.doncolton.com/.../printf.pdf and trying to study the formatting strings.

    This is not the first time I have searched for the printf documentation :(

    Sorry, I am new to C, just started to code in keil, previously I was using assembly, and finishing my projects somehow. AND I MUST ACCEPT THAT IT WAS ONLY POSSIBLE BECAUSE OF YOU PEOPLE.

    Instead of "%d\n", I had also tried

    const unsigned char code crlf[3] = {0x0d, 0x0a, 0x00};
    printf("%d%s", i,crlf);

    I thought it may not be a Keil-specific issue, but as I did not have any problem in Pelles C, I asked here. Please help!!!

Children