再會!
我想請您幫忙將 String 解壓縮回其原始資料。
這是提供商發送給我的檔案。
資料說明
第一部分描述閾值資料。

所有資料都作為 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 中執行此操作,以便我們可以在藍色字體中獲得低于值的輸出。

謝謝你們,上帝保佑你們。
uj5u.com熱心網友回復:
您的輸入字串是一個 base64 編碼的位元組陣列,表示浮點值 ( float/ Single) 的壓縮(縮小)序列。
- 您可以使用Convert.FromBase64String()來獲取壓縮位元組
- 使用此位元組陣列初始化 MemoryStream。它用作DeflateStream的輸入流
- 初始化一個新的 MemoryStream 以接收來自DeflateStream.CopyTo()方法的壓縮內容
- 從解壓縮的位元組陣列中獲取一系列 4 個位元組并重建原始值(此處使用BitConverter.ToSingle()和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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/448301.html
上一篇:更新VB.NET時總值未更新
