Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中检测负十六进制值?_C#_Hex - Fatal编程技术网

如何在C#中检测负十六进制值?

如何在C#中检测负十六进制值?,c#,hex,C#,Hex,我正在为一个温度传感器的驱动器工作。 值以十六进制形式出现,存储方式如下: string tempHex = "08C5"; //-> Would be 22,45°C 问题是,传感器也会注意到负值,我不知道如何检测C#中2的补码 也许你能帮我。 谢谢大家! 一个简单的方法就可以了,它和实现2的补码imho一样复杂。 例如: static bool isPositive(string hex) { return Convert.ToInt16(hex, 16)>0; }

我正在为一个温度传感器的驱动器工作。 值以十六进制形式出现,存储方式如下:

string tempHex = "08C5"; //-> Would be 22,45°C
问题是,传感器也会注意到负值,我不知道如何检测C#中2的补码

也许你能帮我。 谢谢大家!

一个简单的方法就可以了,它和实现2的补码imho一样复杂。 例如:

static bool isPositive(string hex)
{
    return Convert.ToInt16(hex, 16)>0;
}

0000到7FFF的值为正值,8000到FFFF的值为负值。幸运的是,
Convert.ToInt16()
为您完成了这一切,因为这正是所有现代计算机内部存储数字的方式。只需乘以0.01即可获得摄氏度。

您看过传感器的数据表了吗?通常在数据表中,你会得到一个数学表达式来转换utile数据中的原始数据。我得到了,但问题是,他们只说负值以2的补码形式显示。你所说的“值以十六进制形式出现”到底是什么意思?你真的把它们当作字符串来读?这似乎很奇怪。总是2字节吗?这个问题现在太模糊了。。。如果你能展示到目前为止你所得到的,那真的会很有帮助。如果值是2的补码形式,你能不能得到二进制/原始数据并检查前几位?是的,我实际上把它们作为字符串。这是一个问题吗?这对示例数据不起作用。对于4位十六进制字符串(如示例所示),所有值都将为正值,因为
Convert.ToInt32(“FFFF”,16)
将为65535而不是-1。要获得负数
Int32
需要一个以8到F开头的8位十六进制字符串。请改用
Convert.ToInt16
static public double Temp(string hex)
{
    return Convert.ToInt16(hex,16)*0.01;
}