2017-05-11 1 views
0

modbus에서 값을 16 비트 단락 (부호 없음) 또는 int (16 비트 단어로 처리해야 함)로 추출 할 수 있습니다. 나는 java를 사용하여 하나의 32 비트 부동 소수점 값을 생성하기 위해 두 값을 결합해야하는 임무가있다. I는 GUI 프로그램을 사용하여 관찰두 개의 16 비트 정수를 하나의 32 비트 부동 소수점 값

어떤 값의 예 :

  • INT + INT = 플로트
  • 0 + 16,256 = 1
  • 0 + 17,096 = 100
  • 0 + 17,097 = 100.5
  • 17,530 + 8,192 = 1000.5
= 1000
  • 0 + 17,530 0

    비트 와이즈 연산자를 시도했지만 트릭을 수행하지 않은 것 같습니다. 내 머리를 긁적 거리다!

  • +0

    '결합'은 무엇을 의미합니까? 정수에 더하고 float로 표현하거나 2 개의 16 비트 정수의 비트 패턴을 사용하여 float로 처리되는 32 비트 패턴을 만드시겠습니까? – Harmlezz

    +0

    은 int + int가 길지 않은가요? –

    +0

    '65535.0F * int1 + int2'와 같이 간단 할 수 있지만, 적절한 문항이 없으면 실제로 질문에 대답 할 수 없습니다. – EJP

    답변

    1

    Float.intBitsToFloat(int bits)을 사용하여 int의 비트에서 float을 빌드 할 수 있습니다. 예

    short high = ... // the high 16 bits 
    short low = ... // the low 16 bits 
    int combined = (high << 16) | low; 
    float num = Float.intBitsToFloat(combined); 
    

    :

    short high = 17530; 
    short low = 8192; 
    

    는 플로트 1000.5를 생성한다.

    +0

    완벽한, 감사합니다. – JensD

    관련 문제