2

我正在尝试将包含十六进制值的字符串转换为其等效的 C# 有符号短

例如:

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

我想做相反的事情,即我想将 0xFFFF 转换为 -1

我在用着

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

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

谁能帮我?谢谢

4

3 回答 3

2

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

您应该改用Convert.ToSByte(string)

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

[Test]
public void MyTest()
{
    short myValue = Convert.ToSByte("FF", 16);
    Assert.AreEqual(-1, myValue);
}
于 2013-10-12T19:46:08.017 回答
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
于 2013-10-12T19:54:00.073 回答
1

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

于 2013-10-12T19:47:48.970 回答