在Java中阅读Little Endian unsigned long

时间:2014-06-20 15:31:33

标签: java endianness

我是Java的新手(我来自C / C ++),我需要读取存储在LittleEndian中的无符号4字节数字。

我的功能不起作用(我刚刚上网搜索,看起来似乎正确......)

public long readlU32() throws IOException {
                long dword = 0;
                for(int i = 0; i < 4; i++)
                        dword = (dword << 8) | readU8();
                return dword;
        }

我在这里看到了其他问题,它应该有用......出了什么问题?

P.S。:我必须读取的值是0x94010000,因此该值应为404,但程序将其读作2483093504(Big Endian值)...

1 个答案:

答案 0 :(得分:2)

你正在改变字节,以便最多离开#34;字节最终成为&#34;最左边&#34;仍然。您正在将404的位表示转换为小端,0x94010000转换为它将在大端中表示的内容,即2483093504

尝试这一点,它会将读取的每个字节从最后开始转移到long个字节。

for(int i = 0; i < 4; i++)
{
    dword = dword | (readU8() << (8 * i));
}