如何检测 C# 中的负十六进制值?
Posted
技术标签:
【中文标题】如何检测 C# 中的负十六进制值?【英文标题】:How can I detect negative Hex Values in C#? 【发布时间】:2015-07-26 23:32:56 【问题描述】:我正在开发温度传感器的驱动程序。 这些值以十六进制形式出现,它们的存储方式如下:
string tempHex = "08C5"; //-> Would be 22,45°C
问题是,传感器也可以注意到负值,我不知道如何在 C# 中检测到 2 的补码。
也许你可以帮助我。 谢谢!
【问题讨论】:
您阅读过传感器的数据表吗?通常在数据表中你会得到一个数学表达式来转换utile data中的raw data。 我做了,但问题是,他们只说负值以 2 的补码形式显示。 “值以十六进制形式出现”是什么意思?你实际上是把它们读成strings?这似乎很奇怪。它总是2个字节吗?这个问题目前太模糊了......如果你能展示你到目前为止所拥有的东西,那真的很有帮助。 如果值是 2 的补码形式,你能不能得到二进制/原始数据并检查前几位? 是的,我实际上将它们作为字符串获取。有问题吗? 【参考方案1】:一个简单的convert 就可以了,就像实现2 的补码恕我直言一样复杂。 例如:
static bool isPositive(string hex)
return Convert.ToInt16(hex, 16)>0;
【讨论】:
这不适用于示例数据。对于 4 位十六进制字符串(如示例所示),所有值都是正数,因为Convert.ToInt32("FFFF",16)
将是 65535 而不是 -1。要获得否定的Int32
,您需要一个以 8 到 F 开头的 8 位十六进制字符串。请改用Convert.ToInt16
。【参考方案2】:
static public double Temp(string hex)
return Convert.ToInt16(hex,16)*0.01;
从 0000 到 7FFF 的值是正数,从 8000 到 FFFF 是负数。幸运的是,Convert.ToInt16()
为您完成了这一切,因为这正是所有现代计算机内部存储数字的方式。您只需乘以 0.01 即可获得摄氏度。
【讨论】:
以上是关于如何检测 C# 中的负十六进制值?的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中,如何使用十六进制值创建 System.Drawing.Color 对象? [复制]