首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从二进制文件将2字节(无符号短)转换为Java

从二进制文件将2字节(无符号短)转换为Java
EN

Stack Overflow用户
提问于 2016-07-25 11:57:01
回答 1查看 1.6K关注 0票数 4

我有带有未签名短裤的二进制文件。在JAVA中,我需要从这个字节取无符号值到原语缩写。字节顺序是小Endian。我试着这样做:

代码语言:javascript
复制
    byte[] bytes = new byte[frameLength];
    for(int i = 0; i < fh.nFrames; i++) {
        raf.readFully(bytes);
        for(int j = 2; j < frameLength/2; j++) {
            short s;
            s = (short) (bytes[2*j + 1] << 8 | bytes[2 * j]);       
            System.out.println(s);
            System.out.println(Integer.toBinaryString(s));
        }
    }

示例:例1(确定):未签名短: 8237在十六进制(小endian):2D 20在二进制(大端):001000101101和System.out.println(Integer.toBinaryString(s))给我们10000000101101。这是正确的。

例2(不确定)未签名短: 384在十六进制(小endian):8001在二进制(大端):0000 0001 1000 0000和System.out.println(S)给我们11111111111111111111111110000000。System.out.println给我们128号。这不对。我怎么能从中得到384的价值?

有人知道为什么不起作用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-25 12:16:11

Java在进行整数计算之前将所有内容转换为int,并且当字节被签名时,您将得到一个符号扩展。您必须强制字节保持在0;255范围内,按位排列并使用0xFF:

代码语言:javascript
复制
s = (short) ((bytes[2*j + 1] & 0xFF) << 8 | (bytes[2 * j] & 0xFF)); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38567135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档