2016-06-01 2 views
0

나는 몇 년 전에 썼던 시각적 인 기본 프로그램으로 제작 한 파일이 있습니다. 이 데이터를 변환하려고 노력 중이므로 대체 자바 프로그램에서이 데이터를 읽을 수 있습니다. 8 바이트 double 인 VB 날짜를 변환하는 데 문제가 있습니다. 내가 this 스레드를 읽었습니다. 이 단계를 거치면 날짜를 수동으로 (0x00000000E080E440) (2014/12/18) 변환 할 수 있습니다. little endian에서 big endian decimal = 4.1991E4로 41991은 올바른 날짜를 나타냅니다. 이제는 자바로 작성하려고합니다. 다른 게시물은 스와핑 코드를 참조하고이 코드를 뽑았습니다.VB 바이너리 파일에서 날짜를 읽는 방법

/** 
    * Byte swap a single double value. 
    * 
    * @param value Value to byte swap. 
    * @return  Byte swapped representation. 
    */ 
    public static double swap (double value) 
    { 
    long longValue = Double.doubleToLongBits (value); 
    longValue = swap (longValue); 
    return Double.longBitsToDouble (longValue); 
    } 

코드가 컴파일되지 않습니다. 나는 단지 자바를 배우고 있으므로 나와 함께 곰. 이 코드는 재귀 적으로 자신을 호출하는 것처럼 보이지만 스왑이 double을 기다리는 longValue를 전달하면 자체를 호출합니다 (스왑). 내가 놓친 게 있니? 리틀 엔디안에서 빅으로 스왑 된 바이트를 어떻게 얻을 수 있습니까?

답변

0

코드 자체를 호출하지 않습니다. 메서드는 swap(long longValue)이고, 메서드는 swap(double value입니다. 다른 방법이 없기 때문에 아마 컴파일되지 않을 것입니다.

+0

"호환되지 않는 유형 : 두 번에서 길게 손실이 발생할 수 있습니다. 메서드 스왑이 무한정 반복됩니다." –

+1

컴파일러는'swap (long longvalue) '메소드를 찾고있다. 하나를 찾지 못하기 때문에, double을 long으로 변환하고 가지고있는 루틴을 호출하기를 원한다고 가정합니다. 반복합니다. 아마도 코드에없는 바이트를 역순으로 변환하는 메서드가있을 수 있습니다. 따라서이 코드는 잘못되어이 컴파일 메시지를 throw하고 작동하지 않습니다. 이 코드를 뽑은 곳으로 돌아가 누락 된 메서드가 없는지 확인합니다. – arcy

관련 문제