2013-01-12 2 views
-4

packing() and unpacking() 메서드로 아래 부동 소수점 지시문이 루비에서 어떻게 작동하는지 이해할 수 있습니까?Ruby 패킹()/언 패킹()에서 부동 소수점 지시문이 어떻게 작동합니까?

  • D and d
  • F and f
  • g and G
  • e and E

나는 다음 시도했다 :

irb(main):001:0> [2,44,43].pack('D') 
=> "\x00\x00\x00\x00\x00\x00\[email protected]" 
irb(main):002:0> [2,44,43].pack('d') 
=> "\x00\x00\x00\x00\x00\x00\[email protected]" 
irb(main):004:0> [2,44,43].pack('ddd') 
=> "\x00\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\ 
[email protected]" 
irb(main):005:0> [2,44,43].pack('fff') 
=> "\x00\x00\[email protected]\x00\x000B\x00\x00,B" 
irb(main):006:0> [2,44,43].pack('FFF') 
=> "\x00\x00\[email protected]\x00\x000B\x00\x00,B" 
irb(main):007:0> [2,44,43].pack('ggg') 
=> "@\x00\x00\x00B0\x00\x00B,\x00\x00" 
irb(main):008:0> [2,44,43].pack('GGG') 
=> "@\x00\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]\x80\x00\x00\x00\x0 
0\x00" 
irb(main):009:0> 

출력은 어떻게됩니까? 그러한 계산의 논리는 무엇입니까?

미리 감사드립니다.

+2

에서 [문서] (HTTP의 어느 부분 : //ruby-doc.org/core-1.9.3/String.html#method-i-unpack) 문제가 있습니까? –

+0

예, 예제가있는 지시문 중 일부만 표시했지만 목록의 일부는 표시하지 않았습니다. 루비의이 플랫폼을 처음 다루는 초보자로서이 작품들이 얼마나 정확하게 작동하고 있는지, 논리가 그들과 어떤 관계가 있는지 알고 싶습니다. –

+1

헥스 덤퍼와 함께 사용해 보셨습니까? Python과 Perl에서와 같은 방식으로 작동합니다. 원시 형식을 원시 비트와 원시 비트로 변환합니다. –

답변

1

이러한 지시문은 배열의 숫자를 부동 소수점 바이트 표현으로 변환합니다. 이 문서 예
https://www.youtube.com/watch?v=t-8fMtUNX1A

및 읽기 :
http://www.geeksforgeeks.org/floating-point-representation-basics/

Google을 통해를

부동 소수점 표현 :

당신이 비디오를 볼 수 있습니다 무슨 일이 일어나고 있는지 배우고 싶은 경우에

위의 답변을 searching for "floating point representation"에 의해 찾았습니다.
> [2.0].pack('f').bytes.map(&:to_i) 
=> [0, 0, 0, 64] 

는 16 진수로 표현되는 부동 소수점 숫자입니다 :

0x40000000 

당신이 64가에 0x40 인 것을 알 수 있습니다


그냥 당신에게 예제를 제공합니다 16 진수.

이되는 이유를 이해하려면 컴퓨터가 부동 소수점 숫자를 이진 표현으로 변환하는 방법을 이해해야합니다.

이 페이지를 사용할 수 있습니다

그것을 밖으로 테스트 : 여기 예를 들어
http://www.h-schmidt.net/FloatConverter/IEEE754.html

이 무엇인지 것은 2.0에 대한 다음과 같습니다

http://i.imgur.com/qWqFM.png

+0

아니요, 하나의 소식을 전하고 있습니다. 누군가 그 소식에 어떻게 답했는지보십시오. 그리고 위 게시글에 대한 답변을 찾지 못해 게시했습니다. 설명을 보라. 제발 투표하지 마세요! [게시물] (http://stackoverflow.com/questions/14294988/how-the-x-x-directives-work-with-ruby-pack-unpack-method). –

+1

@PythonLikeYOU 그 대답을 읽었습니다. 간단히 대답 할 수는 없습니다. 비디오 (10 분)를 보시면 간단하지 않다고 생각됩니다. – Casper

+0

괜찮아! 그때 열어 보자, 누구든지 분명히 여기에 대답 할 수 있기를 바랍니다, 투표하지 마라. BTW 나는 비디오를보고있다! –