Decoding an extravagant binary format 46 06 09 21 43 65 87 F9

Papa Tana papa.tana101@REDACTED
Mon Jul 13 18:46:12 CEST 2020


Hi All,

I receive binaries in my application:

IMSI_CODED in hex_dump
0000   46 06 09 21 43 65 87 F9

In reality, the peer is sending me this IMSI : (64 60 90 12 34 56 78 9F).

I hard-decode this IMSI_CODED like below:

	<<R1:8, R2:8, R3:8, R4:8, R5:8, R6:8, R7:8, R8:8>> = <<IMSI_CODED:64>>,	
	
	Elements = [
		string:right(integer_to_list(R1,16), 2, $0),
		string:right(integer_to_list(R2,16), 2, $0),
		string:right(integer_to_list(R3,16), 2, $0),
		string:right(integer_to_list(R4,16), 2, $0),
		string:right(integer_to_list(R5,16), 2, $0),
		string:right(integer_to_list(R6,16), 2, $0),
		string:right(integer_to_list(R7,16), 2, $0),
		string:right(integer_to_list(R8,16), 2, $0)
		],                                          	
	R = [[B,A] || [A,B] <-Elements ],	%% here, I need to revert each element :-/
	L = list_to_tuple(R),
	Z = tuple_to_list(L),
	Real_IMSI = string:join(Z,"")
	
	
=> Real_IMSI = 	"646090123456789F"

I'm using the same hard-coding style to decode some SMS payload in
binary format..

But I can feel that there is a much more elegant way to do it, because
as you can see, despite it's working, it's really dirty etc...

Can anyone advice please?

Thanks,

Best Regards,


More information about the erlang-questions mailing list