¡Buenos días!
Me gustaría pedir su ayuda para descomprimir String a sus datos originales.
Aquí está el documento que me envió el proveedor.
Descripción de datos
La primera parte describe los datos del umbral.
Todos los datos se gestionan como números flotantes de precisión simple IEEE 754 de Little Endian. Su representación binaria es (representada en datos hexadecimales):
Datos comprimidos (zip) Los datos binarios de umbral se comprimen utilizando el algoritmo 'deflate'. Cada resultado de compresión se da aquí (representado en datos hexadecimales):
Umbrales: $63 00 03 05 47 24 DA 81 81 A1 C1 9E 81 61 01 98 06 00
Datos codificados (base64) Los datos comprimidos de umbral se codifican en 'base64' para transmitirse como caracteres ASCII. Los resultados de cada conversión se dan aquí (representados en datos hexadecimales):
Umbrales: $59 77 41 44 42 55 63 6B 32 6F 47 42 6F 63 47 65 67 57 45 42 6D 41 59 41
Aquí está el marco de salida (contenido del marco del fabricante) Los datos de los umbrales se envían luego usando su carácter ASCII correspondiente Aquí está el marco de histograma ASTM resultante enviado:
YwADBUck2oGBocGegWEBmAYA
Como se explica en los detalles anteriores, lo que quiero hacer es al revés.
Los paquetes que recibimos son
YwADBUck2oGBocGegWEBmAYA
luego, desde allí, conviértalo al valor hexadecimal Base64, que es la salida.
Umbrales: $59 77 41 44 42 55 63 6B 32 6F 47 42 6F 63 47 65 67 57 45 42 6D 41 59 41
Esta primera parte ya se implementó utilizando esta línea de códigos.
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 FunctionSin embargo, estamos atascados en el siguiente proceso, que se desinfla a números flotantes.
Mi pregunta es cómo podemos hacer esto en VB.net para que podamos obtener los siguientes valores de salida en fuente azul.
Gracias y que Dios los bendiga a todos.
Su cadena de entrada es una matriz de bytes codificada en base64, que representa una secuencia comprimida (desinflada) de valores de punto flotante ( float / Single ).
Un ejemplo:
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 El contenido de outputData ahora es:
0 10 0 10 2 1 5 1