我是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值)...
答案 0 :(得分:2)
你正在改变字节,以便最多离开#34;字节最终成为&#34;最左边&#34;仍然。您正在将404
的位表示转换为小端,0x94010000
转换为它将在大端中表示的内容,即2483093504
。
尝试这一点,它会将读取的每个字节从最后开始转移到long
个字节。
for(int i = 0; i < 4; i++)
{
dword = dword | (readU8() << (8 * i));
}