[erlang-questions] Bit Packing question
Erik Søe Sørensen
eriksoe@REDACTED
Sun Dec 14 13:04:51 CET 2014
Since no-one else mentioned it:
What you're looking for is probably the "unit" modifier:
1> Num = 123.
123
2> <<Num:4/unit:8>>.
<<0,0,0,123>>
The default unit for (integers/floats/bitstring) is 1 bit, while the
default unit for binaries ('bytes') is 1 byte.
/Erik
2014-12-13 15:35 GMT+01:00 PAILLEAU Eric <eric.pailleau@REDACTED>:
>
> 5> A = <<1,2,8>>.
> <<1,2,8>>
> 6> P = <<A:2/binary>>.
> <<1,2>>
>
> Got it ?
>
> Le 13/12/2014 15:32, PAILLEAU Eric a écrit :
>
> 1> Num = 128.
>> 128
>> 2> BNum = <<Num>>.
>> <<128>>
>> 3> Packet = <<BNum:1/binary>>.
>> <<128>>
>>
>> regards.
>>
>>
>> Le 13/12/2014 15:25, Santosh Kumar a écrit :
>>
>>> Hi Wes,
>>> I just tried <<BNum:4/binary>> and that didn't work as well. Here are
>>> the complete steps I ran through in erl:
>>>
>>> 1> Num = 128.
>>>
>>> 128
>>>
>>> 2> BNum = <<Num>>.
>>>
>>> <<128>>
>>>
>>> 3> Packet = <<BNum:4/binary>>.
>>>
>>> ** exception error: bad argument
>>>
>>>
>>> Any help much appreciated.
>>>
>>>
>>> Thanks
>>>
>>> Santosh
>>>
>>>
>>> On Fri, Dec 12, 2014 at 11:54 PM, Wes James <comptekki@REDACTED
>>> <mailto:comptekki@REDACTED>> wrote:
>>>
>>> According to:
>>>
>>> http://www.erlang.org/doc/programming_examples/bit_syntax.html
>>>
>>> after the / you need integer, float or binary, i.e.,
>>> <<BNum:4/binary>>
>>>
>>> -wes
>>>
>>>
>>> On Fri Dec 12 2014 at 9:22:59 PM Santosh Kumar <santosh79@REDACTED
>>> <mailto:santosh79@REDACTED>> wrote:
>>>
>>> Hrm, I'm not sure I understand. Here's some code:
>>>
>>> Num = 128.
>>>
>>> 128
>>>
>>>
>>> So, Num is a number. I then do:
>>>
>>> BNum = <<Num>>.
>>>
>>>
>>> Now, BNum is a binary. I check it too:
>>>
>>> is_binary(BNum).
>>>
>>> true
>>>
>>>
>>> I now, try doing:
>>>
>>> Packet = <<BNum:4/bytes>>.
>>>
>>> ** exception error: bad argument
>>>
>>>
>>> Here, I am trying to create another binary Packet, that is 4
>>> bytes long as and has as it's contents BNum. If what you say is
>>> true and "/bytes" is used to pack Binary data this would work.
>>> Unless I am missing something.
>>>
>>>
>>> Thanks for your response.
>>>
>>>
>>> Santosh
>>>
>>>
>>> On Fri, Dec 12, 2014 at 10:39 PM, Bob Ippolito <bob@REDACTED
>>> <mailto:bob@REDACTED>> wrote:
>>>
>>> 'bytes' is for packing binaries, not numbers. The
>>> working example you have is the correct way to do it.
>>>
>>>
>>> On Friday, December 12, 2014, Santosh Kumar
>>> <santosh79@REDACTED <mailto:santosh79@REDACTED>> wrote:
>>>
>>> Hi group,
>>> I was trying to pack a number into 4 bytes and was
>>> having a hard time doing it. Here is what I was trying:
>>>
>>> 102> Num = 128.
>>>
>>> 128
>>>
>>> 103> <<Num:4/bytes>>.
>>>
>>> ** exception error: bad argument
>>>
>>>
>>> While this works:
>>>
>>>
>>> 104> <<Num:32>>.
>>>
>>> <<0,0,0,128>>
>>>
>>>
>>> Here the packing into 32 bits works but the packing into
>>> 4 bytes fails. Not sure why.
>>>
>>>
>>> Any help, much appreciated.
>>>
>>>
>>> Thanks
>>>
>>> Santosh
>>>
>>> _________________________________________________
>>> erlang-questions mailing list
>>> erlang-questions@REDACTED <mailto:erlang-questions@REDACTED>
>>> http://erlang.org/mailman/__listinfo/erlang-questions
>>> <http://erlang.org/mailman/listinfo/erlang-questions>
>>>
>>>
>>>
>>> _______________________________________________
>>> erlang-questions mailing list
>>> erlang-questions@REDACTED
>>> http://erlang.org/mailman/listinfo/erlang-questions
>>>
>>>
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://erlang.org/mailman/listinfo/erlang-questions
>>
>>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20141214/3eff3cc2/attachment.htm>
More information about the erlang-questions
mailing list