将十六进制数转换为带符号的短短

本文关键字:带符号 十六进制数 转换 | 更新日期: 2023-09-27 18:35:10

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

例如:

-1 的等效十六进制数为 0xFFFF(以两个字节为单位)

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

我正在使用

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

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

谁能帮我?谢谢

将十六进制数转换为带符号的短短

当您的输入是"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

您希望转换有符号字节的字符串表示形式,而不是短字节。

您应该改用 Convert.ToSByte(string)。

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

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

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