2017-02-08 27 views
2

私はエリキシルには新しく、私は興奮しています。私はIEX端末で以下のようなバイナリで遊んだ。エリクサーで数値を文字列に変換する方法は?

iex(34)> world = <<119,111,114,108,100>> 
"world" 

iex(35)> <<x::size(40)>> = world 
"world" 

iex(36)> x 
512970878052 

私は本当にが何を表すかの数分かりませんが、私は本当に言葉「世界」に戻って、それを変換します。どうやってやるの?

感謝:)

答えて

7

あなたが戻って変換するために、まったく同じ表現を使用することができます! (あなたはまた、両方のケースでちょうど<<x::40>>代わり<<x::size(40)>>のを書くことができます。)

iex(1)> world = <<119,111,114,108,100>> 
"world" 
iex(2)> <<x::size(40)>> = world 
"world" 
iex(3)> x 
512970878052 
iex(4)> <<x::size(40)>> 
"world" 


私は本当に番号512970878052が整数だ

を表しているかわかりません符号なしビッグエンディアン整数、すなわち

と解釈されるときには、バイト [119, 111, 114, 108, 100]で表されます。
iex(5)> use Bitwise 
Bitwise 
iex(6)> 119 <<< 32 ||| 111 <<< 24 ||| 114 <<< 16 ||| 108 <<< 8 ||| 100 
512970878052 
+0

私は512970878052から119を得ることができます:512970878052 >>> 32 ...しかし、私は111などを得ることができませんでした...私は本当にビット操作を行ったことはありません:P。ゲームのためにtcp上でバイナリメッセージングを構築する必要があるのは初めてです –

+0

最下位バイトの後にすべてを削除する必要があります。 '512970878052 >>> n &&& 0xff'を試してください。ここで' n'は '32'、' 24'などです。 – Dogbert

+0

@BromoProgrammerは119,111などを取得することができます。「<< x1 :: 8」、「x2 :: 8」、「x3 :: 8」、「x4 :: 8」、「x5 :: 8」、「_ :: binary」= << "512970878052: :40 >>。あなたはこれらの変換をたくさん必要としているように見えるので、 'get_byte(position、input)'のようなマクロを書くつもりです。 – mudasobwa

関連する問題