2015-05-15 50 views
10

我正在研究溫度傳感器的驅動程序。 值在十六進制形式來了,他們都儲存這樣的:如何檢測C#中的負值十六進制值?

string tempHex = "08C5"; //-> Would be 22,45°C 

的問題是,該傳感器還可以注意到負值,我不知道我怎麼可以檢測C#2的補數。

也許你可以幫我。 謝謝!

+0

您是否閱讀過傳感器的數據表? Usualy在數據表中獲得**數學表達式**,將原始數據*轉換爲有用數據*。 – adricadar

+0

我做過了,但問題是,他們只是說負值以2的補碼形式顯示。 – xileb0

+0

你的意思是「值是否以十六進制形式出現」?你實際上是將它們看作* strings *?這似乎很奇怪。它總是2個字節?這個問題目前太模糊了......如果你能證明你到目前爲止,那真的會有所幫助。 –

回答

5

一個簡單的convert會這樣做,它和實現2的補充imho一樣複雜。 例如:從0000

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

這不適用於示例數據。對於一個4位十六進制字符串(如示例所示),所有值都是正數,因爲Convert.ToInt32(「FFFF」,16)將是65535而不是-1。爲了得到一個負的'Int32',你需要一個8位的十六進制字符串,從8開始到F.使用'Convert.ToInt16'代替。 –

+0

@MarkLakata我明白,謝謝。 –

18
static public double Temp(string hex) 
{ 
    return Convert.ToInt16(hex,16)*0.01; 
} 

值到7FFF將是正的,8000〜FFFF將是負的。幸運的是,Convert.ToInt16()完成這一切,因爲這正是數字在所有現代計算機上的內部存儲方式。你只需要0.01的倍數來獲得攝氏溫度。