Java读取unsigned int,存储并将其写回

我需要从quicktime文件中读取unsigned int,然后将其写回另一个quicktime文件。

目前我将unsigned int读入Long,但在写回来的时候,我从来没有设法用4个字节作为unsigned int写回确切的数字。 长期具有我需要回写的正确值。 (例如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); } 

任何帮助,将不胜感激。

只需将你的长期写入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 vs -14680067
 255
 31
 255
 253
 1048573对比1048573
 0
 15
 255
 253 

正如所料

如果您只想阅读,存储和重写它,那么您可以使用int。 更一般:只要您不解释这些位,您只需读取,存储和写入它们,而无需关心位的预期解释