@@ -111,50 +111,51 @@ let explode s =
111
111
in
112
112
exp (String. length s - 1 ) []
113
113
114
- let printhex little str =
115
- let print_chunk chunk =
116
- Printf. printf " %08lx" chunk
114
+ let string_to_hexstring little str =
115
+ let accumulate acc chunk =
116
+ Printf. sprintf " %s% 08lx" acc chunk
117
117
in
118
- let rec print_little_loop bs =
118
+ let rec little_loop acc bs =
119
119
bitmatch bs with
120
120
| {chunk : 32 : littleendian ; rest : - 1 : bitstring }
121
- when bitstring_length rest = 0 -> print_chunk chunk
121
+ when bitstring_length rest = 0 -> accumulate acc chunk
122
122
| {chunk : 32 : littleendian ;
123
123
chunk2 : 24 : littleendian ; rest : - 1 : bitstring }
124
124
when bitstring_length rest = 0 ->
125
- (print_chunk chunk; Printf. printf " %06x\n " chunk2)
125
+ let acc = accumulate acc chunk in
126
+ Printf. sprintf " %s%06x\n " acc chunk2
126
127
| {chunk : 32 : littleendian; rest : -1 : bitstring } ->
127
- (print_chunk chunk; print_little_loop rest)
128
+ let acc = accumulate acc chunk in
129
+ little_loop acc rest
128
130
| {chunk : 8 : littleendian ; rest : - 1 : bitstring }
129
131
when bitstring_length rest = 0 ->
130
- Printf. printf " %02x\n " chunk
132
+ Printf. sprintf " %s% 02x\n " acc chunk
131
133
| {chunk : 16 : littleendian ; rest : - 1 : bitstring }
132
134
when bitstring_length rest = 0 ->
133
- Printf. printf " %04x\n " chunk
135
+ Printf. sprintf " %s% 04x\n " acc chunk
134
136
in
135
- let rec print_big_loop bs =
137
+ let rec big_loop acc bs =
136
138
bitmatch bs with
137
139
| {chunk : 32 : bigendian ; rest : - 1 : bitstring }
138
- when bitstring_length rest = 0 -> print_chunk chunk
140
+ when bitstring_length rest = 0 -> accumulate acc chunk
139
141
| {chunk : 32 : bigendian ;
140
142
chunk2 : 24 : bigendian ; rest : - 1 : bitstring }
141
143
when bitstring_length rest = 0 ->
142
- (print_chunk chunk; Printf. printf " %06x\n " chunk2)
144
+ let acc = accumulate acc chunk in
145
+ Printf. sprintf " %s%06x\n " acc chunk2
143
146
| {chunk : 32 : bigendian; rest : -1 : bitstring } ->
144
- (print_chunk chunk; print_big_loop rest)
147
+ let acc = accumulate acc chunk in
148
+ big_loop acc rest
145
149
| {chunk : 8 : bigendian ; rest : - 1 : bitstring }
146
150
when bitstring_length rest = 0 ->
147
- Printf. printf " %02x\n " chunk
151
+ Printf. sprintf " %s% 02x\n " acc chunk
148
152
| {chunk : 16 : bigendian ; rest : - 1 : bitstring }
149
153
when bitstring_length rest = 0 ->
150
- Printf. printf " %04x\n " chunk
154
+ Printf. sprintf " %s% 04x\n " acc chunk
151
155
in
152
156
let bs = bitstring_of_string str in
153
- begin
154
- if little then print_little_loop bs
155
- else print_big_loop bs
156
- end ;
157
- flush stdout
157
+ if little then little_loop " " bs
158
+ else big_loop " " bs
158
159
159
160
let hexdump str =
160
161
bitstring_of_string str |> hexdump_bitstring stdout
0 commit comments