2011-09-22 82 views
1

我需要阅读从QuickTime文件unsigned int类型,并把它写回到另一个QuickTime文件。Java的阅读unsigned int类型,存储和写回

目前我读的unsigned int的成长,但在写回我从来没有设法写的确切数字早在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); 
    } 

任何帮助,将不胜感激的价值。

+0

在java中,没有这样的事情作为unsigned int。而长有8个字节。 –

+0

因为它长是我们最接近的一个unsigned int。 –

回答

3

只要写你的长期铸造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 vs 1048573 
0 
15 
255 
253
预期

+0

的int溢出了一些值,因为网络/ QuickTime的INT具有较大的容量比Java int的可容纳 –

+0

有没有办法,你可以放入4个字节的值啤酒则2^32 - 1,并提供了代码将正常工作的小于2^32的任何数字。 –

0

如果你只是想读取,存储和重写它,那么你可以只使用int。 更普遍的:只要你不解释的位你可以只读取,存储,并将其写入,而无需关心位的预期解释