2015-08-26 53 views
9

的字節,98749287說,有一些內置/ libray功能,無論是二郎神或酏劑,用於獲取以字節爲單位的大小?獲取大小在給定一個整數的任意整數

澄清用於表示二進制數字的最小字節數。

看似簡單,並書面使用「除以基地」的方法,然後對位進行計數的函數和,但搜索文檔的某些小時後還沒有發現什麼,似乎有什麼有用的。

+1

OOC , 你想做什麼? – zxq9

+1

我必須使用基本編碼規則對某些整數進行編碼(將任意整數部分打包成7位系列)。 – Englishbob

+3

有一個Erlang的ASN.1模塊,工作得很好。根據您的整體需求,這可能是一個更好的選擇(我經常使用它!)。 – zxq9

回答

11

如果有一個無符號的整數,則可以使用下面的代碼片斷:

byte_size(binary:encode_unsigned(Integer)) 

實施例:

1> byte_size(binary:encode_unsigned(3)). 
1 
2> byte_size(binary:encode_unsigned(256)). 
2 
3> byte_size(binary:encode_unsigned(98749287)). 
4 
+0

正是我在找的東西。學習Elixir的問題在於容易忘記Erlang文檔(或者更確切地說是「避免」)。現在可以拋出一些功能。 – Englishbob

+1

是的,可能會很棘手。如果你是在OS X這隻幫助,但我通常使用破折號,同時搜索Erlang和藥劑文檔,如「整數」的東西,「二進制」和「大小」和這樣的。這是找到可能相關功能的好方法。 –

1

嘗試這個表達式:

Value = (... your input ...), 
NumBytes = size(integer_to_binary(Value, 2) + 7) div 8. 

參考:http://www.erlang.org/doc/man/erlang.html#integer_to_binary-2

+0

這似乎工作。雖然留下了一個亂七八糟的小數,必須四捨五入。關於+7的想法是什麼? – Englishbob

+0

+7是試圖收集。請將分區更改爲地板或整數部分,如C運算符'/'。 – Nayuki

+1

使用'div 8'而不是'/ 8'來進行整數除法。 – legoscia