MBF を IEEE に変換するための以下のトピックを見つけました。
以下にマークされたコードの機能を説明できる人はいますか?
Dim sign As Byte = mbf(6) And ToByte(&H80) ' AND (&H80) の理由は?
Dim exp As Int16 = mbf(7) - 128S - 1S + 1023S 'なぜ 1152 (128+1+1023) なのですか?
ieee(7) = ieee(7) または sign 'なぜ符号を ieee(7) に保存しないのですか?
ieee(7) = ieee(7) または ToByte(exp >> 4 And &HFF) '4 をシフトする理由は何ですか?
Public Shared Function MTID(ByVal src() As Byte, ByVal startIndex As Integer) As Double
Dim mbf(7) As Byte
Dim ieee(7) As Byte
Array.Copy(src, startIndex, mbf, 0, 8)
If mbf(7) <> 0 Then
Dim sign As Byte = mbf(6) And ToByte(&H80)
Dim exp As Int16 = mbf(7) - 128S - 1S + 1023S
ieee(7) = ieee(7) Or sign
ieee(7) = ieee(7) Or ToByte(exp >> 4 And &HFF)
ieee(6) = ieee(6) Or ToByte(exp << 4 And &HFF)
For i As Integer = 6 To 1 Step -1
mbf(i) <<= 1
mbf(i) = mbf(i) Or mbf(i - 1) >> 7
Next
mbf(0) <<= 1
For i As Integer = 6 To 1 Step -1
ieee(i) = ieee(i) Or mbf(i) >> 4
ieee(i - 1) = ieee(i - 1) Or mbf(i) << 4
Next
ieee(0) = ieee(0) Or mbf(0) >> 4
End If
Return BitConverter.ToDouble(ieee, 0)
End Function