2014-10-16 444 views
2

我有一塊硬件需要設置某個參數才能正常工作。我將使用C#將值發送到設備。該設備只接受一個十進制值;然而,我被告知要輸入的值是以4字節的HEX數字給我的。我知道如何將單個十六進制轉換爲小數,但我不知道如何轉換4個字節。將4字節十六進制轉換爲十進制值

我給出的十六進制值是:0x00, 0x00, 0x1B, 0x03。我會採取哪些步驟將其轉換爲單個十進制值?要獲得額外的功勞,如果我在「Programmer Mode」中使用Windows Calc,有沒有辦法解決這個問題(我還試圖理解爲此所需的概念)?

作爲一個供參考,硬件描述以下列方式使用此參數:

Size 4 
Default 8 

Name Report type send in Reporting Group 1 - Defines the type of report sent for the Reporting Group 1. 

Type rangemapped 

Values 
1  -> Battery Report 
2  -> MultiSensor Report for the whole device 
4  -> Meter Report for Watt for the whole device 
8  -> Meter Report for kWh for the whole device 
256 -> Meter Report for Watt for clamp 1 
512 -> Meter Report for Watt for clamp 2 
1024  -> Meter Report for Watt for clamp 3 
2048  -> Meter Report for kWh for clamp 1 
4096  -> Meter Report for Watt for clamp 2 
8192  -> Meter Report for kWh for clamp 3 

回答

2

可以使用BitConverter類此

byte[] bytes = { 0, 0, 0, 25 }; 

// If the system architecture is little-endian (that is, little end first), 
// reverse the byte array. 
if (BitConverter.IsLittleEndian) 
    Array.Reverse(bytes); 

int i = BitConverter.ToInt32(bytes, 0); 

http://msdn.microsoft.com/en-us/library/bb384066.aspx

你需要知道十六進制數字本身是否爲Little Endian or Big Endian。如果您當前的系統體系結構(由BitConverter.IsLittleEndian指示)與十六進制數序列的字節序不匹配,則需要按照示例中所示調用Array.Reverse(該示例假定字節爲大端)。

額外信用

的4個數字表示四個 「基體256」 的值(相同基礎0x100的值)。假設數字大端,你可以做計算自己喜歡的:

0x00, 0x00, 0x1B, 0x03 => 

0x0 * 256^3 + 0x0 * 256^2 + 0x1b * 256^1 + 0x03 * 256^0 = 
0 * 16777216 + 0 * 65536 + 27 * 256 + 3 * 1 = 
6915 
+0

你好,能否請你指點如何將十進制轉換爲4字節的十六進制像 00 00 00 00 =十進制(0) 01 00 00 00 =十進制(1) 02 00 00 00 =十進制(2) 0A 00 00 00 =十進制(10) FF 00 00 00 =十進制(255) 00 01 00 00 =十進制(256) 01 01 00 00 =十進制(257) 02 01 00 00 =十進制(258) – Amit 2015-04-17 05:21:30

+0

請以新的問題的形式提問。您將不得不指定您的問題是否需要大端或小端代表。 – 2015-04-17 17:32:25

相關問題