将4字节十六进制转换为十进制值
问题描述:
我有一块硬件需要设置某个参数才能正常工作。我将使用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
答
可以使用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
你好,能否请你指点如何将十进制转换为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
请以新的问题的形式提问。您将不得不指定您的问题是否需要大端或小端代表。 – 2015-04-17 17:32:25