V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuroid
V2EX  ›  Android

在 Java 中怎么转换 unsigned 类型的字节数据?

  •  
  •   xuroid · 2019-11-28 13:52:47 +08:00 · 4986 次点击
    这是一个创建于 1582 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务器发给客户端的数据中有四个字节是 unsigned int 型的字节数据,怎么用 Java 转换成 int 呢?
    说是十六位数据,去掉符号位,再转 int,可是不太会操作哎,直接每个元素&0xff 出来的结果不对。小白请求了。
    6 条回复    2019-11-28 17:57:19 +08:00
    xuroid
        1
    xuroid  
    OP
       2019-11-28 14:26:54 +08:00
    已解决,这种弱智问题真不应该马上发出来问大家,又删不了贴子。
    qwerthhusn
        2
    qwerthhusn  
       2019-11-28 15:15:21 +08:00
    说实话,问题感觉都没说清楚。

    “在 Java 中怎么转换 unsigned 类型的字节数据?”,字节就是字节,没有有符号无符号的说法,就是八个一零位,看你咋看这个字节。
    所以问题应该是“在 Java 中怎么将四个字节转成 unsigned int”。可以看 Guava 库的 Ints.fromBytes 工具类,,
    而且也没说这四个字节是大端还是小端,那就默认按大端来。

    public static int fromBytes(byte b1, byte b2, byte b3, byte b4) {
    return b1 << 24 | (b2 & 0xFF) << 16 | (b3 & 0xFF) << 8 | (b4 & 0xFF);
    }

    Java 中没有 unsigned 这一说,只能用 long 来表示 unsigned int。。看 java.lang.Integer#toUnsignedLong 有现成方法
    diveIntoWork
        3
    diveIntoWork  
       2019-11-28 15:49:35 +08:00
    unsigned int 范围是:0 ~ 4294967295
    java 中的 int 范围是:-2147483648 ~ 2147483647
    同样是四个字节,因为 java 中最高位是符号位,所以表示的最大值比 unsigned int 小一半。
    所以,要把 unsigned int 转成 java 中的 int,至少用 5 个字节
    szq8014
        4
    szq8014  
       2019-11-28 17:21:29 +08:00
    用 long 就可以了。哈哈哈哈哈哈
    leon0903
        5
    leon0903  
       2019-11-28 17:25:37 +08:00
    long 应该就可以了吧
    xuanbg
        6
    xuanbg  
       2019-11-28 17:57:19 +08:00
    楼主的问题描述看得我都晕了,最后反应过来不就是 int 有符号不够大吗?不够大用 long 啊。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5290 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:32 · PVG 17:32 · LAX 02:32 · JFK 05:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.