2010-10-24 72 views
12

我試圖讓一個整數轉換成二進制:整數到二進制二郎

543 = <<"543">> 

我怎樣才能做到這一點沒有

integer_to_list(list_to_binary(K)). 
+2

不應該是list_to_binary(integer_to_list(Int))嗎? – hdima 2010-10-25 08:04:28

+0

我認爲他的意思是在erlang中生成全功能字符串需要太多的mem(因爲它的鏈接字符列表,所以每個字母都會消耗額外的32位或64位指針指向字符串中的下一個字符) – test30 2015-06-14 01:09:06

+0

我非常懷疑erlang開發人員將字符串作爲鏈接的字符列表。我沒有檢查自己,但我無法想象生產中如此低效的鏈表使用。 – BAR 2015-06-14 02:14:37

回答

27

如果你想543轉換爲< <「543」 >>我不認爲你能找到的東西比快:

1> list_to_binary(integer_to_list(543)). 
<<"543">> 

因爲在這種情況下用C實現這兩種功能

如果你想整數轉換到儘可能小的二進制表示可以使用binary:encode_unsigned功能從新binary模塊是這樣的:

1> binary:encode_unsigned(543). 
<<2,31>> 
2> binary:encode_unsigned(543, little). 
<<31,2>> 
4

你可以嘗試像

6> A = 12345.      
12345 
7> B = <<A:32>>. 
<<0,0,48,57>> 

但是這要求您提前知道最大位數。

+0

好主意,但如果我不知道怎麼辦。沒有冒號就沒有二進制選項。我試過_沒有工作。 – BAR 2010-10-24 23:01:20

+0

您可以隨時完成轉換。 (rem 4294967296),每個32位和循環。 – 2010-10-25 16:46:01