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