Reputation: 25
I am trying to convert hex data to signed int/decimal and can't figure out what I'm doing wrong.
I need FE
to turn into -2
.
I'm using Convert.ToInt32(fields[10], 16)
but am getting 254
instead of -2
.
Any assistance would be greatly appreciated.
Upvotes: 0
Views: 2008
Reputation: 705
Interpret the value as a signed byte:
sbyte value = Convert.ToSByte("FE", 16); //-2
Upvotes: 2
Reputation: 2785
int
is 32 bits wide, so 0xFE is REALLY being interpreted as 0x000000FE for the purposes of Convert.ToInt32(string, int)
, which is equal to 254 in the space of int
.
Since you're wanting to work with a signed byte range of values , use Convert.ToSByte(string, int)
instead (byte
is unsigned by default, so you need the sbyte
type instead).
Convert.ToSByte("FE",16)
Upvotes: 4
Reputation: 476649
Well the bounds of Int32
are -2 147 483 648 to 2 147 483 647. So FE
matches 254.
In case you want to do a wrap around over 128, the most elegant solution is proably to use a signed byte (sbyte
):
csharp> Convert.ToSByte("FE",16);
-2
Upvotes: 0