0

だから私はJ2ME開発のためにJavaでしばらく前に書いたいくつかのレガシーツールをサポートしようとしています。

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の土地で私はやっています:-

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");
}

したがって、ファイルは正常に開きますが、番号が一致しません。エンディアンを裏返してみました。私が考えることができる唯一のことは、署名されていない(java)プラットフォームから署名された(c ++)プラットフォームに変換しているときに、そこにサインインして値を台無しにしているということです。

確かではありませんが、どんなポインタでも大歓迎です。

4

1 に答える 1

1

fscanfバイナリデータを読み取るためではなく、テキストを読み取るためのものです。

の代わりにfscanf、次を使用する必要がありますfread

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

さらに、バイナリファイルを読み取りたいことを示すために、「r」ではなく「rb」オプションを指定してファイルを開く必要があります。オペレーティングシステムによっては、これが不可欠な場合があります。

これは正しく、これはJava側です:-

さて、C++側でのCodoの答えとこれが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(); 
于 2012-04-16T18:13:27.873 に答える