如何检测 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# 中的十六进制和字节

Python中读取到16进制数如何转成有符号数值

在 C# 中,如何使用十六进制值创建 System.Drawing.Color 对象? [复制]

如何使用 C# 编辑二进制文件的十六进制值

在 C# 中将十六进制值从 SQL Server 转换为日期时间

c# winform 如何实现16进制颜色值的转换