将十六进制数转换为签名短

时间:2013-10-12 19:33:33

标签: c# type-conversion number-formatting hex

我正在尝试将包含十六进制值的字符串转换为C#

中的等效签名短字

例如:

-1的等效十六进制数是0xFFFF(两个字节)

我想做反向,即我想将0xFFFF转换为-1

我正在使用

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

但是输出y是255而不是-1,我需要有符号数字等于

谁能帮助我吗? 感谢

3 个答案:

答案 0 :(得分:2)

您正在寻找转换有符号字节的字符串表示形式,而不是简短。

您应该使用Convert.ToSByte(string)代替。

一个简单的单元测试来演示

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

答案 1 :(得分:2)

当您的输入为“FF”时,您的字符串表示形式为单字节的十六进制 如果您尝试将其分配给短(两个字节),则不考虑将最后一位应用于转换后的数字,从而获得255值。

而是字符串表示“FFFF”表示两个字节,其中最后一位设置为1,因此如果分配给像Int16这样的有符号类型,则结果为负,而如果分配给像ushort这样的无符号类型,则为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);

输出:

-1
65535
-1
255
255

答案 2 :(得分:1)

有关在十六进制字符串和数值之间进行转换的完整详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb311038.aspx