2015-05-15 3 views
10

Я работаю над драйвером для датчика температуры. Значения приходят в шестнадцатеричном виде, и они сохраняются как:Как определить отрицательные значения Hex в C#?

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

Проблема заключается в том, что датчик может также заметить отрицательные значения, и я понятия не имею, как я могу обнаружить 2 в дополнение в C#.

Возможно, вы можете мне помочь. Спасибо!

+0

Вы прочитали техническое описание датчика? Обычно в техническом описании вы получаете ** математическое выражение ** для преобразования * необработанных данных * в * утильные данные *. – adricadar

+0

Я сделал, но проблема в том, что они говорят только, что отрицательные значения показаны в форме дополнения 2. – xileb0

+0

Что именно * вы подразумеваете под «значениями, поступающими в шестнадцатеричной форме»? Вы на самом деле читаете их как * строки *? Это кажется очень странным. Всегда ли это 2 байта? На данный момент этот вопрос слишком расплывчатый ... если бы вы могли показать, что у вас есть, это действительно поможет. –

ответ

5

Простой convert будет делать, это так же сложно, как и реализация дополнения 2 в imho. Например:

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

Это не будет работать для данных примера. Для четырехзначной шестнадцатеричной строки (как показано в примере) все значения будут положительными, так как «Convert.ToInt32 (« FFFF », 16)» будет 65535 не -1. Чтобы получить отрицательный 'Int32', вам понадобится восьмизначная шестнадцатеричная строка, начинающаяся с 8 до F. Вместо этого используйте' Convert.ToInt16'. –

+0

@MarkLakata я понимаю, спасибо. –

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

значения от 0000 до 7FFF будет положительным, 8000 до FFFF будет отрицательным. К счастью, Convert.ToInt16() делает это все для вас, так как это точно, как номера хранятся внутри на всех современных компьютерах. Вам просто нужно несколько на 0,01 для получения Цельсия.

Смежные вопросы