2012-04-16 2 views
1

이진 파일을 C로 작성했으며 java로 읽고 싶습니다. 나는이 같은 C에서 파일을 썼다 : 자바에서Java에서 C로 작성된 파일에서 읽기

void Log(TCHAR *name,int age){ 
    write_int(file, 2012); 
    write_int(file, 4); 
    write_int(file, 16); 
    write_int(file, 12); 
    write_int(file, 58); 
    write_int(file, 50); 

    fwrite(&name, sizeof(name), 1, file); 
    fwrite(&age, sizeof(age), 1, file); 
    fflush(processusFile); 
} 

내가 BinaryFile 클래스 http://www.heatonresearch.com/code/22/BinaryFile.java를 사용하고 난 이렇게 : 이것은 숯불 * 작동하지 않는

RandomAccessFile f = new RandomAccessFile("myfile.dat", "r"); 
BinaryFile binaryFile = new BinaryFile(f); 
ArrayList<String> text = new ArrayList<>(); 
while (true) { 
try { 
    Calendar calendar = new GregorianCalendar(); 
    int year = (int) binaryFile.readDWord(); 
    int month = (int) binaryFile.readDWord(); 
    int date = (int) binaryFile.readDWord(); 
    int hourOfDay = (int) binaryFile.readDWord(); 
    int minute = (int) binaryFile.readDWord(); 
    int second = (int) binaryFile.readDWord(); 

    calendar.set(year, month, date, hourOfDay, minute, second); 
    System.out.println(binaryFile.readFixedString(64));  
    catch (Exception e) { 
     break; 
    } 
} 

하지만 작동 인터넷 용. 어떻게 문자열을 쓸 수 있습니까?

답변

1

sizeof(name) 시스템에 char 포인터의 크기, 하지 문자열의 길이이기 때문입니다. 문자열과 별도로 길이를 써야합니다.

size_t len = strlen(name); 
write_int(file, len); 
fwrite(&name, len, sizeof(char), file); 
+0

(44))하지만 java에서 이렇게하면 :'System.out.println (">"+ length + ">"binaryFile.readFixedString (length));'내가 이것을 가지고있다 :> 8>? A @ – jadou

+0

@khelch I 문자열을 읽기 전에 길이를 읽었다 고 가정하십시오. – dasblinkenlight

+0

예 System.out 이전에'int length = (int) binaryFile.readDWord();'@ – jadou

1

"int"유형을 사용해야합니다. 자바

INT는있을 수 있습니다 C에서 그리 C.에서 항상 32 비트입니다 16,32,64 비트

1

이 잘못 :

fwrite(&name, sizeof(name), 1, file); 

이는 문자의 수를 기록합니다 당신이 밖으로 쓰고 싶은 크기가 고정되어있는 경우 일반적으로 4

포인터의 크기에 대응 (자바 코드는 64자를 기대 모양), 당신은 Log()에 어떻게 든 그 크기를 통과해야합니다.

C에서 함수 내에서 Log()의 첫 번째 인수로 전달 된 배열의 크기를 알아낼 방법이 없습니다.이 때문에 명시 적으로 지정해야합니다.

1

귀하의 fwrite 문이 제대로 보이지 않습니다 :

fwrite(&name, sizeof(name), 1, file); 

당신은 실제로 원하는 같은 것을 : 내가 ("TESTNAME을"C 코드에서 이런 짓을 해, params 내 함수를 호출

fwrite(name, sizeof(TCHAR), strlen(name) + 1, file); 
+1

그 경로를 사용한다면,'sizeof (* name)'을'sizeof (TCHAR)'에 맞추어 사용하십시오 - 명확하고'name '의 타입이 변경되면 계속 작동합니다. –

관련 문제