2017-02-08 2 views
2

저는 연금술을 처음 접했고 흥분됩니다. 나는 IEX 터미널에서 아래와 같이 바이너리로 놀았습니다.엘릭서에서 숫자를 다시 문자열로 변환하는 방법은 무엇입니까?

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

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

iex(36)> x 
512970878052 

정말 512970878052가 무엇을 나타내는 숫자 모르겠지만, 난 정말 단어 "세계"로 다시 변환 할. 어떻게해야합니까?

고마워요 :) Thanks :

답변

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

관련 문제