在vb.net中从Hex中提取制造日期

时间:2018-01-22 07:57:46

标签: string vb.net date bits

我正在使用SD卡,成功地从ic读取SID到vb.net.Problem来自我需要制造日期的代码。数据表说:

  

制造日期由两个十六进制数字组成,一个是8   表示年(y)的位和另一个表示4位的位   月(月)。 “m”字段[11:8]是月份代码。 1 = 1月。该   “y”字段[19:12]是年份代码。 0 = 2000.作为一个例子,   生产日期“2001年4月”的日期字段的二进制值将   是:00000001 0100。

下面这个并不难,最难的是创建一个代码,它会根据十六进制数字放置DateTime。例如,我接收0x00 0xAC [000000000000000010101100]我们只占12位(前4位保留),意味着[000010101100],前8位是一年0x0A = 10(DEC)= 2010,最后4位是一个mounth [1100 ] = 12(DEC),这意味着我们有12.2010生产日期。如何使用bit进行这种操作然后将结果放入DateTime?我通过serialport.readexisting在字符串表示中收到HEX。

1 个答案:

答案 0 :(得分:1)

一种方法是使用BitArray()将2个十六进制值转换为字节数组中的位表示 然后,使用Math.Pow(),使用位位置将值转换为十进制表示 DateTime()将Year和Month的十进制值转换为Date。

给出两个十六进制值0x00 0xAC:

Dim _sHexValue1 As String = "0x00"
Dim _sHexValue2 As String = "0xAC"

请注意,第一个字节设置为“0xAC”,第二个字节设置为“0x00”。

'Convert the two "Hex" strings to byte
Dim _Bytes As Byte() = {Convert.ToByte(_sHexValue2.Substring(2, 2), 16),
                        Convert.ToByte(_sHexValue1.Substring(2, 2), 16)}
'Convert the byte array in array of bits. => True means that the bit is on (1)
Dim _BitArray As New BitArray(_Bytes)

Dim _month As Integer = 0
Dim _year As Integer = 0

'Convert to decimal the value expressed by the first 4 bits
For x As Integer = 0 To 3
    _month += If(_BitArray(x) = True, CType(Math.Pow(2, x), Integer), 0)
Next
'Convert to decimal the value expressed by bits 4-12
For x As Integer = 0 To 7
    _year += If(_BitArray(x + 4) = True, CType(Math.Pow(2, x), Integer), 0)
Next

Dim _Date As New DateTime(_year + 2000, _month, 1)
'If the string representation is needed:
Dim _sDate As String = _Date.ToString("MM.yyyy")