문제

Ruby Float/Double을 높은 바이트와 낮은 바이트로 고 엔지니어 주문 육각형으로 어떻게 변환합니까?

예시:

start with 99.0

와 끝까지

40 58 C0 00   00 00 00 00
high bytes    low bytes
도움이 되었습니까?

해결책

잘, 패트릭이 말한 것처럼, 과거 사용을 전환하는 데 많은 시간이 걸리지 않습니다. Array\#pack.

irb> [99.0].pack('G').split('').map { |ds| ds[0] }
#=> [64, 88, 192, 0, 0, 0, 0, 0]
irb> _.map { |d| "%02x" % d }
#=> ["40", "58", "c0", "00", "00", "00", "00", "00"]
irb> [99.0].pack('E').split('').map { |ds| ds[0] }
#=> [0, 0, 0, 0, 0, 192, 88, 64]
irb> _.map { |d| "%02x" % d }    
#=> ["00", "00", "00", "00", "00", "c0", "58", "40"]

따라서 제로 인덱스의 고차 바이트로 포장을 풀거나 제로 인덱스의 저 순수 바이트를 포장할지 여부에 따라 달라집니다.

      E     |  Double-precision float, little-endian byte order
      G     |  Double-precision float, network (big-endian) byte order

다른 팁

배열 클래스에는 팩 방법이 있습니다.

a = [99.0]
s = a.pack("d")
s
=> "\000\000\000\000\000\300X@"

이것은 바이트 스트링을 제공하지만 인쇄를 위해 그것에서 16 진수로 변환하는 것은 사소해야합니다.

다른 방법으로 가고 싶다면 문자열 클래스에는 포장되지 않은 메소드가 있습니다.

s.unpack("d")
=>[99.0]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top