Deflate 编码为 Base64 的浮点数据字节

Deflate floating point data bytes encoded as Base64

美好的一天!

我想请求您帮助将字符串解压缩回其原始数据。

这是提供商发给我的文件。

资料说明

第一部分描述阈值数据。

所有数据都作为 Little Endian IEEE 754 单精度浮点数进行管理。 它们的二进制表示是(以十六进制数据表示):

压缩数据 (zip) 使用“deflate”算法压缩阈值二进制数据。这里给出每个压缩结果(以十六进制数据表示):

阈值:$63 00 03 05 47 24 DA 81 81 A1 C1 9E 81 61 01 98 06 00

编码数据(base64) 阈值压缩数据以“base64”编码,以 ASCII 字符形式传输。这里给出了每个转换结果(以十六进制数据表示):

阈值:$59 77 41 44 42 55 63 6B 32 6F 47 42 6F 63 47 65 67 57 45 42 6D 41 59 41

这是输出框架(制造商框架内容) 然后使用相应的 ASCII 字符发送阈值数据 这是发送的结果直方图 ASTM 框架:

YwADBUck2oGBocGegWEBmAYA

正如上面的详细解释,我想做的是倒退。

我们收到的数据包是

YwADBUck2oGBocGegWEBmAYA

然后从那里将其转换为十六进制值 Base64,即输出。

阈值:$59 77 41 44 42 55 63 6B 32 6F 47 42 6F 63 47 65 67 57 45 42 6D 41 59 41

第一部分已经使用这行代码实现了。

Function String2Base64(val_string As String) As String
    Dim hex As String
    For i As Integer = 0 To val_string.Length - 1
        hex &= Asc(val_string.Substring(i, 1)).ToString("x").ToUpper
    Next
    Return hex
End Function

然而,我们被困在下一个过程中,该过程将缩小为浮点数。

我的问题是我们如何在 VB.net 中执行此操作,以便我们能够以蓝色字体获得低于值的输出。

谢谢你们,上帝保佑你们。

您的输入字符串是一个 base64 编码的字节数组,表示压缩(压缩)的浮点值序列 (float / Single)。

一个例子:

Imports System.IO
Imports System.IO.Compression

Dim base64 = "YwADBUck2oGBocGegWEBmAYA"
Dim decodedBytes = Convert.FromBase64String(base64)

Dim outputData As New List(Of Single)

Using inputStream = New MemoryStream(decodedBytes),
    outputStream = New MemoryStream(),
    defStream = New DeflateStream(inputStream, CompressionMode.Decompress)
    defStream.CopyTo(outputStream)
    defStream.Flush()

    Dim dataArray = outputStream.ToArray()

    For pos As Integer = 0 To dataArray.Length - 1 Step 4
        ' .Net Framework
        ' outputData.Add(BitConverter.ToSingle(New ArraySegment(Of Byte)(dataArray, pos, 4).ToArray(), 0))
        ' .Net 5+
        outputData.Add(BitConverter.ToSingle(New ArraySegment(Of Byte)(dataArray, pos, 4)))
    Next
End Using

现在outputData的内容是:

0
10
0
10
2
1
5
1