【问题标题】:Convert 4-byte hex into decimal value将 4 字节十六进制转换为十进制值
【发布时间】:2014-10-16 17:30:28
【问题描述】:

我有一块硬件需要设置特定参数才能正常工作。我将使用 C# 将值发送到设备。该设备只接受一个十进制值;但是,我被告知输入的值是以 4 字节十六进制数字的形式提供给我的。我了解如何将单个十六进制转换为十进制,但我不确定如何转换 4 个字节。

我得到的十六进制值是:0x00, 0x00, 0x1B, 0x03。我要采取哪些步骤将其转换为单个十进制值?为了获得额外的荣誉,如果我在“程序员模式”下使用 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

【问题讨论】:

    标签: c#


    【解决方案1】:

    您可以为此使用 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,如示例所示(示例假定字节为大字节序)。

    额外积分

    四个数字代表四个“base 256”值(与base 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  
    

    【讨论】:

    • 嗨,您能否建议如何将十进制转换为 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)
    • 请以新问题的形式提出。您必须在问题中指定是需要大端还是小端表示。
    猜你喜欢
    • 2019-09-07
    • 2013-09-12
    • 2014-02-05
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多