ComRd returns a char[] buffer, so it's not converting anything to two's compliment. What are you doing with the data after you receive it? If you take the char one byte at a time and cast it as an int, it will be two's compliment. If you cast the char as an unsigned char, you won't get two's compliment.
For example:
#include
main()
{
char c;
char s[256];
c = 255;
printf("%d %d", (int) c, (unsigned char) c);
gets(s);
}
Output:
-1 255