converting hex number to signed short

11,823

Solution 1

When your input is "FF" you have the string representation in hex of a single byte.
If you try to assign it to a short (two bytes), the last bit is not considered for applying the sign to the converted number and thus you get the 255 value.

Instead a string representation of "FFFF" represents two bytes where the last bit is set to 1 so the result, if assigned to a signed type like Int16, is negative while, if assigned to an unsigned type like ushort, is 65535-

string number = "0xFFFF";
short n = Convert.ToInt16(number, 16);
ushort u = Convert.ToUInt16(number, 16);

Console.WriteLine(n);
Console.WriteLine(u);

number = "0xFF";
byte b = Convert.ToByte(number, 16);
short x = Convert.ToInt16(number, 16);
ushort z = Convert.ToUInt16(number, 16);

Console.WriteLine(n);
Console.WriteLine(x);
Console.WriteLine(z);

Output:

-1
65535
-1
255
255

Solution 2

You're looking to convert the string representation of a signed byte, not short.

You should use Convert.ToSByte(string) instead.

A simple unit test to demonstrate

[Test]
public void MyTest()
{
    short myValue = Convert.ToSByte("FF", 16);
    Assert.AreEqual(-1, myValue);
}

Solution 3

Please see http://msdn.microsoft.com/en-us/library/bb311038.aspx for full details on converting between hex strings and numeric values.

Share:
11,823
Rehab11
Author by

Rehab11

Updated on June 04, 2022

Comments

  • Rehab11
    Rehab11 almost 2 years

    I'm trying to convert a string that includes a hex value into its equivalent signed short in C#

    for example:

    the equivalent hex number of -1 is 0xFFFF (in two bytes)

    I want to do the inverse, i.e I want to convert 0xFFFF into -1

    I'm using

     string x = "FF";
     short y = Convert.ToInt16(x,16);
    

    but the output y is 255 instead of -1, I need the signed number equivalent

    can anyone help me? thanks