2011-02-04 3 views
5

У меня есть битовая строка erlang, основанная на сетевом представлении MAC-адреса, например. <<255,0,0,0,0,1>>, и хотел бы преобразовать его в целое число. Каков наиболее эффективный способ сделать это преобразование?Erlang bitstring для целочисленного преобразования

Thanks, Matt.

ответ

13

зачитаю:

2> <<N:48/integer>> = <<255,0,0,0,0,1>>. 
<<255,0,0,0,0,1>> 
3> N. 
280375465082881 

Хотя это не соответствует номеру, который вы хотите. Возможно, из-за некоторой ошибки округления с плавающей запятой?

1

1> binary_to_list (< < 255,0,0,0,0,1 >>).

[255,0,0,0,0,1]

Например.

+0

Я думаю, может быть, я был неясно - я хочу преобразовать в одно 48-битное число, а не список чисел. В приведенном выше случае я хочу, чтобы ответ был 280375481860097 – mpm

14

Вы можете выбрать, сколько данных вы пакет/матч, используя :Size и -unit:N опции:

1> <<X:6/integer-unit:8>> = <<255,0,0,0,0,1>>. 
<<255,0,0,0,0,1>> 
2> X. 
280375465082881 

или более динамично:

3> Bin = <<255,0,0,0,0,1>>.     
<<255,0,0,0,0,1>> 
4> Size = size(Bin). 
6 
5> <<Int:(Size)/integer-unit:8>> = Bin.  
<<255,0,0,0,0,1>> 
6> Int. 
280375465082881 

Использование этих переменных размеров, можно распаковывать в значительной степени все что пожелаете.

+2

Не слушайте этого парня, он дает ТЕРРИТОРИАЛЬНЫЕ СОВЕТЫ: ​​P –

+0

Отличный ответ, но я ДАВАЯ КРЕСТОВЫХ ОТВЕТОВ, которых я могу только предположить, это ваш смертельный враг, избивающий вас это на 1 минуту. – mpm

+0

собираюсь проголосовать за этот страшный совет, чтобы сравнять счет – keymone