将4字节十六进制转换为十进制值

时间:2014-10-16 17:30:29

标签: c#

我有一块硬件需要设置某个参数才能正常运行。我将使用C#将值发送到设备。设备只接受一个十进制值;但是,告诉我输入的值是4字节的十六进制数。我理解如何将单个十六进制转换为十进制,但我不确定如何转换4个字节。

我给出的十六进制值是:0x00, 0x00, 0x1B, 0x03。我将采取哪些步骤将其转换为单个十进制值?如果我在"程序员模式"中使用Windows计算,​​则需要额外的功劳。是否有办法解决这个问题(我也试图理解这样做的概念)?

作为FYI,硬件以下列方式描述此参数:

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

1 个答案:

答案 0 :(得分: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,如示例所示(该示例假定字节为big endian)。 / p>

额外信用

这四个数字代表四个"基数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