@@ -11,8 +11,10 @@ EXPORT Type
11
11
EXPORT make
12
12
EXPORT field
13
13
EXPORT packBool
14
- EXPORT packIEEE32
15
- EXPORT packIEEE64
14
+ EXPORT packIEEE32BE
15
+ EXPORT packIEEE32LE
16
+ EXPORT packIEEE64BE
17
+ EXPORT packIEEE64LE
16
18
EXPORT packInt8
17
19
EXPORT packInt16BE
18
20
EXPORT packInt16LE
@@ -28,8 +30,10 @@ EXPORT packUInt32LE
28
30
EXPORT packUInt64BE
29
31
EXPORT packUInt64LE
30
32
EXPORT unpackBool
31
- EXPORT unpackIEEE32
32
- EXPORT unpackIEEE64
33
+ EXPORT unpackIEEE32BE
34
+ EXPORT unpackIEEE32LE
35
+ EXPORT unpackIEEE64BE
36
+ EXPORT unpackIEEE64LE
33
37
EXPORT unpackInt8
34
38
EXPORT unpackInt16BE
35
39
EXPORT unpackInt16LE
@@ -53,8 +57,10 @@ IMPORT binary
53
57
*
54
58
* Values :
55
59
* bool - boolean
56
- * ieee32 - IEEE 754 32 bit binary floating point
57
- * ieee64 - IEEE 754 64 bit binary floating point
60
+ * ieee32BE - IEEE 754 32 bit binary floating point , big endian
61
+ * ieee32LE - IEEE 754 32 bit binary floating point , little endian
62
+ * ieee64BE - IEEE 754 64 bit binary floating point , big endian
63
+ * ieee64LE - IEEE 754 64 bit binary floating point , little endian
58
64
* int8 - signed 8 bit integer
59
65
* int16BE - signed 16 bit integer , big endian
60
66
* int16LE - signed 16 bit integer , little endian
@@ -74,8 +80,10 @@ IMPORT binary
74
80
*/
75
81
TYPE Type IS ENUM
76
82
bool
77
- ieee32
78
- ieee64
83
+ ieee32BE
84
+ ieee32LE
85
+ ieee64BE
86
+ ieee64LE
79
87
int8
80
88
int16BE
81
89
int16LE
@@ -129,9 +137,13 @@ FUNCTION field(name: String, type: Type, width: Number DEFAULT 0): Field
129
137
CASE type
130
138
WHEN Type.bool DO
131
139
w := 1
132
- WHEN Type.ieee32 DO
140
+ WHEN Type.ieee32BE DO
133
141
w := 4
134
- WHEN Type.ieee64 DO
142
+ WHEN Type.ieee32LE DO
143
+ w := 4
144
+ WHEN Type.ieee64BE DO
145
+ w := 8
146
+ WHEN Type.ieee64LE DO
135
147
w := 8
136
148
WHEN Type.int8 DO
137
149
w := 1
@@ -175,17 +187,29 @@ FUNCTION packBool(b: Boolean): Bytes
175
187
RETURN (IF b THEN HEXBYTES "01" ELSE HEXBYTES "00" )
176
188
END FUNCTION
177
189
178
- /* Function : packIEEE32
190
+ /* Function : packIEEE32BE
191
+ *
192
+ * Pack a <Number> value into a <Bytes> in IEEE 754 binary32 floating point format.
193
+ */
194
+ DECLARE NATIVE FUNCTION packIEEE32BE (n : Number ): Bytes
195
+
196
+ /* Function : packIEEE32LE
179
197
*
180
198
* Pack a <Number> value into a <Bytes> in IEEE 754 binary32 floating point format.
181
199
*/
182
- DECLARE NATIVE FUNCTION packIEEE32 (n : Number ): Bytes
200
+ DECLARE NATIVE FUNCTION packIEEE32LE (n : Number ): Bytes
183
201
184
- /* Function : packIEEE64
202
+ /* Function : packIEEE64BE
185
203
*
186
204
* Pack a <Number> value into a <Bytes> in IEEE 754 binary64 floating point format.
187
205
*/
188
- DECLARE NATIVE FUNCTION packIEEE64 (n : Number ): Bytes
206
+ DECLARE NATIVE FUNCTION packIEEE64BE (n : Number ): Bytes
207
+
208
+ /* Function : packIEEE64LE
209
+ *
210
+ * Pack a <Number> value into a <Bytes> in IEEE 754 binary64 floating point format.
211
+ */
212
+ DECLARE NATIVE FUNCTION packIEEE64LE (n : Number ): Bytes
189
213
190
214
/* Function : packInt8
191
215
*
@@ -389,17 +413,29 @@ FUNCTION unpackBool(b: Bytes): Boolean
389
413
RETURN a[0 ] <> 0
390
414
END FUNCTION
391
415
392
- /* Function : unpackIEEE32
416
+ /* Function : unpackIEEE32BE
417
+ *
418
+ * Unpack a <Number> from a <Bytes> in IEEE 754 binary32 floating point format.
419
+ */
420
+ DECLARE NATIVE FUNCTION unpackIEEE32BE (b : Bytes ): Number
421
+
422
+ /* Function : unpackIEEE32LE
393
423
*
394
424
* Unpack a <Number> from a <Bytes> in IEEE 754 binary32 floating point format.
395
425
*/
396
- DECLARE NATIVE FUNCTION unpackIEEE32 (b : Bytes ): Number
426
+ DECLARE NATIVE FUNCTION unpackIEEE32LE (b : Bytes ): Number
427
+
428
+ /* Function : unpackIEEE64BE
429
+ *
430
+ * Unpack a <Number> from a <Bytes> in IEEE 754 binary64 floating point format.
431
+ */
432
+ DECLARE NATIVE FUNCTION unpackIEEE64BE (b : Bytes ): Number
397
433
398
- /* Function : unpackIEEE64
434
+ /* Function : unpackIEEE64LE
399
435
*
400
436
* Unpack a <Number> from a <Bytes> in IEEE 754 binary64 floating point format.
401
437
*/
402
- DECLARE NATIVE FUNCTION unpackIEEE64 (b : Bytes ): Number
438
+ DECLARE NATIVE FUNCTION unpackIEEE64LE (b : Bytes ): Number
403
439
404
440
/* Function : unpackInt8
405
441
*
@@ -610,10 +646,14 @@ FUNCTION Struct.pack(self: Struct, values: Dictionary<Object>): Bytes
610
646
CASE self.fields[f ].type
611
647
WHEN Type.bool DO
612
648
buf.extend (packBool (v ).toArray ())
613
- WHEN Type.ieee32 DO
614
- buf.extend (packIEEE32 (v ).toArray ())
615
- WHEN Type.ieee64 DO
616
- buf.extend (packIEEE64 (v ).toArray ())
649
+ WHEN Type.ieee32BE DO
650
+ buf.extend (packIEEE32BE (v ).toArray ())
651
+ WHEN Type.ieee32LE DO
652
+ buf.extend (packIEEE32LE (v ).toArray ())
653
+ WHEN Type.ieee64BE DO
654
+ buf.extend (packIEEE64BE (v ).toArray ())
655
+ WHEN Type.ieee64LE DO
656
+ buf.extend (packIEEE64LE (v ).toArray ())
617
657
WHEN Type.int8 DO
618
658
buf.extend (packInt8 (v ).toArray ())
619
659
WHEN Type.int16BE DO
@@ -687,11 +727,17 @@ FUNCTION Struct.unpack(self: Struct, data: Bytes): Dictionary<Object>
687
727
WHEN Type.bool DO
688
728
v := unpackBool (data[i TO i ])
689
729
INC i
690
- WHEN Type.ieee32 DO
691
- v := unpackIEEE32 (data[i TO i+3 ])
730
+ WHEN Type.ieee32BE DO
731
+ v := unpackIEEE32BE (data[i TO i+3 ])
692
732
i := i + 4
693
- WHEN Type.ieee64 DO
694
- v := unpackIEEE64 (data[i TO i+7 ])
733
+ WHEN Type.ieee32LE DO
734
+ v := unpackIEEE32LE (data[i TO i+3 ])
735
+ i := i + 4
736
+ WHEN Type.ieee64BE DO
737
+ v := unpackIEEE64BE (data[i TO i+7 ])
738
+ i := i + 8
739
+ WHEN Type.ieee64LE DO
740
+ v := unpackIEEE64LE (data[i TO i+7 ])
695
741
i := i + 8
696
742
WHEN Type.int8 DO
697
743
v := unpackInt8 (data[i TO i ])
@@ -758,13 +804,21 @@ BEGIN MAIN
758
804
TESTCASE packBool (FALSE ) = HEXBYTES "00"
759
805
TESTCASE packBool (TRUE ) = HEXBYTES "01"
760
806
761
- TESTCASE packIEEE32 (0 ) = HEXBYTES "00 00 00 00"
762
- TESTCASE packIEEE32 (1 ) = HEXBYTES "00 00 80 3f"
763
- TESTCASE packIEEE32 (1e10 ) = HEXBYTES "f9 02 15 50"
807
+ TESTCASE packIEEE32BE (0 ) = HEXBYTES "00 00 00 00"
808
+ TESTCASE packIEEE32BE (1 ) = HEXBYTES "3f 80 00 00"
809
+ TESTCASE packIEEE32BE (1e10 ) = HEXBYTES "50 15 02 f9"
810
+
811
+ TESTCASE packIEEE32LE (0 ) = HEXBYTES "00 00 00 00"
812
+ TESTCASE packIEEE32LE (1 ) = HEXBYTES "00 00 80 3f"
813
+ TESTCASE packIEEE32LE (1e10 ) = HEXBYTES "f9 02 15 50"
764
814
765
- TESTCASE packIEEE64 (0 ) = HEXBYTES "00 00 00 00 00 00 00 00"
766
- TESTCASE packIEEE64 (1 ) = HEXBYTES "00 00 00 00 00 00 f0 3f"
767
- TESTCASE packIEEE64 (1e100 ) = HEXBYTES "7d c3 94 25 ad 49 b2 54"
815
+ TESTCASE packIEEE64BE (0 ) = HEXBYTES "00 00 00 00 00 00 00 00"
816
+ TESTCASE packIEEE64BE (1 ) = HEXBYTES "3f f0 00 00 00 00 00 00"
817
+ TESTCASE packIEEE64BE (1e100 ) = HEXBYTES "54 b2 49 ad 25 94 c3 7d"
818
+
819
+ TESTCASE packIEEE64LE (0 ) = HEXBYTES "00 00 00 00 00 00 00 00"
820
+ TESTCASE packIEEE64LE (1 ) = HEXBYTES "00 00 00 00 00 00 f0 3f"
821
+ TESTCASE packIEEE64LE (1e100 ) = HEXBYTES "7d c3 94 25 ad 49 b2 54"
768
822
769
823
TESTCASE packInt8 (-128 ) = HEXBYTES "80"
770
824
TESTCASE packInt8 (-1 ) = HEXBYTES "FF"
@@ -846,13 +900,21 @@ BEGIN MAIN
846
900
TESTCASE unpackBool (HEXBYTES "00" ) = FALSE
847
901
TESTCASE unpackBool (HEXBYTES "01" ) = TRUE
848
902
849
- TESTCASE unpackIEEE32 (HEXBYTES "00 00 00 00" ) = 0
850
- TESTCASE unpackIEEE32 (HEXBYTES "00 00 80 3f" ) = 1
851
- TESTCASE unpackIEEE32 (HEXBYTES "f9 02 15 50" ) = 1e10
903
+ TESTCASE unpackIEEE32BE (HEXBYTES "00 00 00 00" ) = 0
904
+ TESTCASE unpackIEEE32BE (HEXBYTES "3f 80 00 00" ) = 1
905
+ TESTCASE unpackIEEE32BE (HEXBYTES "50 15 02 f9" ) = 1e10
906
+
907
+ TESTCASE unpackIEEE32LE (HEXBYTES "00 00 00 00" ) = 0
908
+ TESTCASE unpackIEEE32LE (HEXBYTES "00 00 80 3f" ) = 1
909
+ TESTCASE unpackIEEE32LE (HEXBYTES "f9 02 15 50" ) = 1e10
910
+
911
+ TESTCASE unpackIEEE64BE (HEXBYTES "00 00 00 00 00 00 00 00" ) = 0
912
+ TESTCASE unpackIEEE64BE (HEXBYTES "3f f0 00 00 00 00 00 00" ) = 1
913
+ TESTCASE unpackIEEE64BE (HEXBYTES "54 b2 49 ad 25 94 c3 7d" ) = 1.000000000000000015902891109759918e100
852
914
853
- TESTCASE unpackIEEE64 (HEXBYTES "00 00 00 00 00 00 00 00" ) = 0
854
- TESTCASE unpackIEEE64 (HEXBYTES "00 00 00 00 00 00 f0 3f" ) = 1
855
- TESTCASE unpackIEEE64 (HEXBYTES "7d c3 94 25 ad 49 b2 54" ) = 1.000000000000000015902891109759918e100
915
+ TESTCASE unpackIEEE64LE (HEXBYTES "00 00 00 00 00 00 00 00" ) = 0
916
+ TESTCASE unpackIEEE64LE (HEXBYTES "00 00 00 00 00 00 f0 3f" ) = 1
917
+ TESTCASE unpackIEEE64LE (HEXBYTES "7d c3 94 25 ad 49 b2 54" ) = 1.000000000000000015902891109759918e100
856
918
857
919
TESTCASE unpackInt8 (HEXBYTES "80" ) = -128
858
920
TESTCASE unpackInt8 (HEXBYTES "FF" ) = -1
0 commit comments