StarScr3am77
StarScr3am77

Reputation: 25

Convert binary to signed int/decimal

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

Answers (3)

mitaness
mitaness

Reputation: 705

Interpret the value as a signed byte:

sbyte value = Convert.ToSByte("FE", 16); //-2

Upvotes: 2

Tyler Lee
Tyler Lee

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

willeM_ Van Onsem
willeM_ Van Onsem

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

Related Questions