2

unsigned int を QuickTime ファイルから読み取り、それを別の QuickTime ファイルに書き戻す必要があります。

現在、unsigned int を Long に読み込んでいますが、書き戻すときに、正確な数値を unsigned int として 4 バイトで書き戻すことができませんでした。long には、書き戻す必要がある正しい値があります。(例: 3289763894 または 370500) Integer.MAX_VALUE より小さい数値 (例: 2997) の書き込みを読み取ることさえできません。

次の方法を使用して値を書き戻しています

 public void writeUInt32(long uint32,DataOutputStream stream) throws IOException {
    writeUInt16((int) (uint32 & 0xffff0000) >> 16,stream);
    writeUInt16((int) uint32 & 0x0000ffff,stream);
    }


public void writeUInt16(int uint16,DataOutputStream stream) throws IOException {
        writeUInt8(uint16 >> 8, stream);
        writeUInt8(uint16, stream);
    }


    public void writeUInt8(int uint8,DataOutputStream stream) throws IOException {
        stream.write(uint8 & 0xFF);
    }

どんな助けでも大歓迎です。

4

2 に答える 2

4

long キャストを int に書き込むだけです。私がチェックしました:


PipedOutputStream pipeOut = new PipedOutputStream ();
PipedInputStream pipeIn = new PipedInputStream (pipeOut);
DataOutputStream os = new DataOutputStream (pipeOut);

long uInt = 0xff1ffffdL;

System.out.println ("" + uInt + " vs " + ((int) uInt));
os.writeInt ((int) uInt);
for (int i = 0; i < 4; i++) System.out.println (pipeIn.read ());

uInt = 0x000ffffdL;
System.out.println ("" + uInt + " vs " + ((int) uInt));
os.writeInt ((int) uInt);
for (int i = 0; i < 4; i++) System.out.println (pipeIn.read ());

出力は

4280287229 対 -14680067
255
31
255
253
1048573対1048573
0
15
255
253
予想通り

于 2011-09-22T09:23:15.540 に答える
0

読み取り、保存、および書き換えのみが必要な場合は、int を使用できます。より一般的には、ビットを解釈しない限り、ビットの意図した解釈を気にせずに、読み取り、保存、書き込みを行うことができます。

于 2011-09-22T09:51:45.443 に答える