Wie konvertiert man ein angegebenes Byte in einer Binärdatei in eine Gleitkommazahl?Konvertieren Sie zum Beispiel die 04-07 Bytes in der ersten Zeile der Abbildung in Gleitkommazahlen, danke Experten!

Das korrekte Ergebnis lautet: 1006.27
Die Binärdatei lautet wie folgt:
598A0F0548917B44F6C87B44855B7B44D7637B44DA57BE45140B000000000000
SkriptingFenster回复:怎样将二进制文件中的指定字节转化为浮点数字?excel VBA

Antwort: Wie konvertiert man die angegebenen Bytes in der Binärdatei in Gleitkommazahlen?Diese Funktion kann nicht implementiert werden
CopyMemory v, b(0), 4
Re: 怎样将二进制文件中的指定字节转化为浮点数字?
filename = Save Text File(
"$temp/deleteme.bin",
Hex To Blob( "598A0F0548917B44F6C87B44855B7B44D7637B44DA57BE45140B000000000000" )
);
// load the entire file. You could use the blob() parameter
// to load a smaller part of the file by offset and length.
blobdata = Load Text File( filename, blob() );
// convert the binary data to a matrix. The 4 means 4 byte chunks
// and "little" means the least significant byte comes first (little endian.)
numbers = Blob To Matrix( blobdata, "float", 4, "little" );
// print the values; JMP uses 8-byte floating point and will
// display more resolution than is actually available.
For( i = 1, i <= N Rows( numbers ), i += 1,
Write( "\!n", i, " ", numbers[i] )
);
1 6.74923813801151e-36
2 1006.27001953125
3 1007.14001464844
4 1005.42999267578
5 1005.55999755859
6 6090.9814453125
7 3.97408244482518e-42
8 0
Es gibt eine ähnliche Funktion, Matrix To Blob, um die andere Richtung umzuwandeln.
4-Byte-Floats haben 6 oder 7 signifikante Stellen. 8-Byte-Floats haben 15 oder 16 signifikante Stellen.
https://en.wikipedia.org/wiki/Single-precision_floating-point_format
https://en.wikipedia.org/wiki/Double-precision_floating-point_format
Wenn Sie versuchen, den Windows-Hex-Rechner zu verwenden, der über eine praktische Bitanzeige verfügt, müssen Sie die Bytes umkehren.
48917B44 -> 447B9148 -> 0 10001000 11110111001000101001000 -> 2^(136-127) * (1+1/2+1/4+1/8+1/16+0/32+1/64 +...)
Betreff: Wie konvertiert man die angegebenen Bytes in der Binärdatei in Gleitkommazahlen?Danke Experten!
In dieser Binärdatei
00, 01 Byte-Jahr, Monat und Tag
02, 03 Byte-Zeit-Division

Möchten Sie die Segmentierung im Code erhöhen? Danke noch einmal!
numbers = Blob To Matrix( blobdata, "float", 4, "little" );
Re: 怎样将二进制文件中的指定字节转化为浮点数字?Sie können diese vier Bytes entweder als vier 1-Byte-Uint oder zwei 2-Byte-Uint verarbeiten. Uint bedeutet Ganzzahl ohne Vorzeichen. Verwenden Sie anstelle von float uint. Sie müssen herausfinden, wie sie die Zeit darstellen, es ist nicht offensichtlich mit nur einem Beispiel, das nicht dekodiert ist.
Betreff: Wie konvertiert man die angegebenen Bytes in der Binärdatei in Gleitkommazahlen?Ich habe immer noch die Möglichkeit, diese Operation durchzuführen.
Ich habe die gesamte Datei hochgeladen, sie enthält 5070 Datenzeilen wie diese.
Sehen Sie, wie man kodiert?
Danke!
00 to 01 bytes: indicates the date. If the value is num, the date calculation method is as follows:
year=floor(num/2048)+2004;
month=floor(mod(num,2048)/100);
day=mod(mod(num,2048),100);
02 to 03 bytes: indicates the number of minutes from 0 o 'clock to the present
04 to 07 bytes: float
08 to 11 bytes: float
12 to 15 bytes: float
16 to 19 bytes: float
20 to 23 bytes: float
24 to 27 bytes: integer
28 to 31 bytes :(reserved)
Re: 怎样将二进制文件中的指定字节转化为浮点数字?Sie könnten ein Diagramm der Daten wie folgt erstellen. Es sieht so aus, als ob es einige Ausreißer gibt!
Daten aus der ZIP-Datei extrahiert und grafisch dargestellt, um Ausreißer zu sehen.
/*
00 to 01 bytes: indicates the date. If the value is num, the date calculation method is as follows:
year=floor(num/2048)+2004;
month=floor(mod(num,2048)/100);
day=mod(mod(num,2048),100);
02 to 03 bytes: indicates the number of minutes from 0 o 'clock to the present
04 to 07 bytes: float
08 to 11 bytes: float
12 to 15 bytes: float
16 to 19 bytes: float
20 to 23 bytes: float
24 to 27 bytes: integer
28 to 31 bytes :(reserved)
*/
za = Open( "z:/445.zip", "zip" ); // open the zip file
datasetname = (za << dir)[1];
blobdata = za << read( datasetname, Format( blob ) ); // load the member as a blob
//
// the following 3 lines import ALL of the data each time. Later,
// only use the columns that were really in that format.
//
integer2 = Blob To Matrix( blobdata, "uint", 2, "little", 16 ); // get the 2-byte unsigned ints for columns 0-1 and 2-3
integer4 = Blob To Matrix( blobdata, "uint", 4, "little", 8 ); // get the 4-byte unsigned ints for columns 24-27 and 28-31
float4 = Blob To Matrix( blobdata, "float", 4, "little", 8 ); // get the 4-byte floats for columns 4-23
// pre-process the matrix columns; no explicit loop is required...
years = Floor( integer2[0, 1] / 2048 ) + 2004;
months = Floor( Mod( integer2[0, 1], 2048 ) / 100 );
days = Mod( Mod( integer2[0, 1], 2048 ), 100 );
seconds = 60 * integer2[0, 2];
// create a table. You could also use new table, but the v1...v5 would be a little more code to type
dt = As Table(
years,
months,
days,
seconds,
float4[0, 2 :: 6],
integer4[0, 7 :: 8],
<<COLUMNNAMES></COLUMNNAMES>
Betreff: Wie konvertiert man die angegebenen Bytes in der Binärdatei in Gleitkommazahlen?Vielen Dank für die Hilfe der Experten!
JMP ist zu mächtig!
JMP kann so verwendet werden!
Ich weiß zu wenig.
Danke nochmal an die Experten!
Betreff: Wie konvertiert man die angegebenen Bytes in der Binärdatei in Gleitkommazahlen?Ich muss noch Experten fragen:
Wie kann man den Code ändern, wenn nur die letzten 480 Datenzeilen wie diese aus dieser Datei extrahiert werden?
Danke Experten!
Solche Daten sind 5070 Zeilen in der Originaldatei. Und das Ende der ursprünglichen Binärdatei ist anderer Text, keine Daten.
Betreff: Wie konvertiert man die angegebenen Bytes in der Binärdatei in Gleitkommazahlen?Ich habe versucht, es so zu ändern, aber es war erfolglos.
r = N Row( years );
dt = As Table(
years,
months,
days,
seconds,
float4[r - 479 :: r, 2 :: 6], ////
integer4[r - 479 :: r, 7 :: 8], ///
<<COLUMNNAMES></COLUMNNAMES>
Re: 怎样将二进制文件中的指定字节转化为浮点数字?Gab es eine Meldung im Log?
alle diese Arrays (Jahre,Monate,Tage,Sekunden) benötigen die gleiche Behandlung: Jahre[r-479::r] zum Beispiel.
Es ist möglicherweise einfacher, unerwünschte Zeilen aus der Tabelle zu löschen, nachdem sie erstellt wurde. Versuchen Sie es mit der Datumsspalte, um den gewünschten Bereich auszuwählen.
Betreff: Wie konvertiert man die angegebenen Bytes in der Binärdatei in Gleitkommazahlen?Wenn ich diese Grafik sehe, erwecke ich zwei Zweifel:
1. Damit die Grafiken kontinuierlich sind und nicht vom Datumsintervall beeinflusst werden, gibt es eine einfache Möglichkeit, dies zu erreichen. Ich werde nur die Zeilennummernspalte als X-Achse verwenden
Column( "reserved" ) << Formula( Row() );dt << run formulas;Column( "reserved" ) << deleteFormula;
……
Variables( X( :reserved ), Y( :v5 ), Y( :v4 ), Y( :v3 ), Y( :v2 ), Y( :v1 ), Y( :xx ) ),

2. Eigentlich die Handelsdaten dieses Datenbestands.
Kann JMP japanische Kerzen wie diesen direkt herstellen? Diese Art von Diagramm kann einfach in Excel erstellt werden

Danke sehr!