2015-05-15 11 views
10

Tôi đang làm việc trên một trình điều khiển cho cảm biến nhiệt độ. Các giá trị đang đến ở dạng Hex và chúng được lưu trữ như:Làm cách nào để phát hiện giá trị Hex âm trong C#?

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

Vấn đề là, các cảm biến cũng có thể nhận thấy giá trị âm và tôi không có ý tưởng làm thế nào tôi có thể phát hiện bổ sung của 2 trong C#.

Có thể bạn có thể giúp tôi. Cảm ơn bạn!

+0

Bạn đã đọc bảng dữ liệu của cảm biến chưa? Thông thường trong biểu dữ liệu bạn nhận được biểu thức toán học ** để chuyển đổi * dữ liệu thô * trong * dữ liệu utile *. – adricadar

+0

Tôi đã làm, nhưng vấn đề là, họ chỉ nói rằng các giá trị âm được thể hiện trong hình thức bổ sung của 2. – xileb0

+0

* Chính xác * ý của bạn là gì bởi "các giá trị đang đến dưới dạng hex"? Bạn đang thực sự đọc chúng dưới dạng * chuỗi *? Điều đó có vẻ rất kỳ quặc. Nó luôn luôn là 2 byte? Câu hỏi này là quá mơ hồ vào lúc này ... nếu bạn có thể cho thấy những gì bạn đã có cho đến nay, điều đó sẽ thực sự giúp đỡ. –

Trả lời

5

Một đơn giản convert sẽ làm, nó phức tạp như triển khai thực hiện bổ sung 2 của imho. Ví dụ:

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

Điều này sẽ không hoạt động đối với dữ liệu ví dụ. Đối với chuỗi hex gồm 4 chữ số (như trong ví dụ), tất cả các giá trị sẽ là dương, vì 'Convert.ToInt32 (" FFFF ", 16)' sẽ là 65535 không -1. Để có được một tiêu cực 'Int32' bạn cần một chuỗi chữ số 8 chữ số bắt đầu bằng 8 đến F. Sử dụng' Convert.ToInt16' để thay thế. –

+0

@MarkLakata Tôi hiểu, cảm ơn bạn. –

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

giá trị từ 0000 đến 7FFF sẽ tích cực, 8000 đến FFFF sẽ là số âm. May mắn thay, Convert.ToInt16() thực hiện tất cả điều này cho bạn, vì đây chính là cách các số được lưu trữ nội bộ trên tất cả các máy tính hiện đại. Bạn chỉ cần có nhiều bằng 0,01 để có được Celsius.

Các vấn đề liên quan