2012-04-16 54 views
0

所以我試圖支持一些遺留工具,我爲Java J2ME開發寫了一段時間。使用STL/POSIX從J2SE加載二進制文件iphone使用STL/POSIX

我需要在iphone/ipad上用C++讀取相同的文件格式。之前你問爲什麼 - >(因爲我需要也支持Android NDK R7)

現在我不能得到的值,以匹配和我確定我是不是正確的:這是我的Java(J2SE)代碼: -

File file = new File(location, "test.d2r"); 

BufferedWriter writer = new BufferedWriter(new FileWriter(file)); 

int i = Integer.reverseBytes(8); 

writer.write(i); 
writer.newLine(); 
writer.flush(); 
writer.close(); 

而在iOS的土地Im做: -

NSString *url = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"d2r"]; 

FILE* fp = fopen([url UTF8String], "r"); 

if (fp) 
{ 
    int j; 
    printf("\nReading...\n"); 

    fscanf(fp, "%c", &j); 
    fclose(fp); 

    printf("DIGIT 1 %d\n\n", j); 
} 
else 
{ 
    printf("\n\n No file found...... \n\n"); 
} 

所以文件打開罰款,但號碼不匹配。我曾嘗試翻轉Endian。我唯一可以考慮的是,當我從一個無符號(Java)平臺轉換爲簽名(C++)平臺時,我得到了那裏的符號以及它的價值。

雖然不確定,但任何指針都會受到歡迎。

回答

1

fscanf用於讀取文本,而不用於讀取二進制數據。

取而代之的是fscanf的,你應該使用fread

fread(&j, 4, 1, fp); 

Futhermore,你應該打開該文件選項「RB」,而不是「R」來表示你想讀一個二進制文件。根據操作系統的不同,這可能是必不可少的。

這是正確的,那麼這是Java方面: -

好了,所以科多關於C++側回答的混合物,這是在Java側寫操作

BufferedOutputStream out = new BufferedOutputStream( 
        new FileOutputStream("bob_FontTool.d2r", false)); 

ByteBuffer buffer = ByteBuffer.allocate(4).order(ByteOrder.nativeOrder()); 
buffer.putInt(8); 
out.write(buffer.array()); 

out.flush(); 
out.close(); 
+0

乾杯,我還額外加載了一個int * []和++指針,並且獲得了相同的數值,它修復了我的C++端,但數字不正確,所以在寫入的某個地方,4個字節的順序或順序是錯誤的。 – Dev2rights 2012-04-16 19:22:47