我正在尝试将包含十六进制值的字符串转换为C#
中的等效签名短字例如:
-1的等效十六进制数是0xFFFF(两个字节)
我想做反向,即我想将0xFFFF转换为-1
我正在使用
string x = "FF";
short y = Convert.ToInt16(x,16);
但是输出y是255而不是-1,我需要有符号数字等于
谁能帮助我吗? 感谢答案 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。