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
)。
- 您可以使用Convert.FromBase64String()来获取压缩字节
- 使用此字节数组初始化 MemoryStream。它用作 DeflateStream
的输入流
- 初始化一个新的 MemoryStream 以接收来自 DeflateStream.CopyTo() 方法
的压缩内容
- 从解压缩的字节数组中获取一系列 4 个字节并重建原始值(此处使用 BitConverter.ToSingle() and an ArraySegment(Of Byte))。
一个例子:
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
美好的一天!
我想请求您帮助将字符串解压缩回其原始数据。
这是提供商发给我的文件。
资料说明
第一部分描述阈值数据。
所有数据都作为 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
)。
- 您可以使用Convert.FromBase64String()来获取压缩字节
- 使用此字节数组初始化 MemoryStream。它用作 DeflateStream 的输入流
- 初始化一个新的 MemoryStream 以接收来自 DeflateStream.CopyTo() 方法 的压缩内容
- 从解压缩的字节数组中获取一系列 4 个字节并重建原始值(此处使用 BitConverter.ToSingle() and an ArraySegment(Of Byte))。
一个例子:
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