Number Representations Confused?

Hi,

I have some code that looks like:

char *response = new char[7];
unsigned short i;

double cTemp;

the output of :

for(i=0;i<=6;i++)
{
cout << hex << (int) response[i] << endl;
}

is:

1
3
2
0
fffffff7
fffffff9
ffffffc2

Now the confusion comes in because I do:

cTemp = ((0x00<<8) + (0xf7));
cout << cTemp << endl;

which outputs: 247 as expected...

However,

When I do:

cTemp = ((response[3]<<8) + response[4]);
cout << cTemp << endl;

which outputs : -9...

Why are the two outputs different?


Did you assign a value to the array elements?
Last edited on
Yes the values to the array elements come from

the return from a com Port which looks like:

int Tserial::get Array (char*buffer, int len)
{
unsigned long read_nbr;
read_nbr = 0;
if(serial_handle!= INVALID_HANDLE_VALUE)
{
ReadFile(serial_handle, buffer, len, &read_nbr,NULL);
}

return ( (int) read_nbr );


}

and is called from a function like:

Tserial com;
com.connect("COM3",9600,spNONE);
com.sendArray(command,8);
Sleep(30);
com.getArray(response,7);
com.disconnect();

Also,

The array elements have to be defined I would think otherwize:

for(i=0;i<=6;i++)
{
cout << hex << (int) response[i] << endl;
}


would not output anything?
Well,

I guess I didn't really get this answered from this forum but after playing around a bit if anyone ever runs into a similar issue this worked for me:

cTemp = ((response[3]&0xff) + response[4]&0xff))

cout << cTemp << endl;

which outputs 247
char is signed usually, so if you go over 127 (?) then you will start getting negative numbers.
Topic archived. No new replies allowed.