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

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

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

    “在 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   56 天前
    unsigned int 范围是:0 ~ 4294967295
    java 中的 int 范围是:-2147483648 ~ 2147483647
    同样是四个字节,因为 java 中最高位是符号位,所以表示的最大值比 unsigned int 小一半。
    所以,要把 unsigned int 转成 java 中的 int,至少用 5 个字节
    szq8014
        4
    szq8014   56 天前
    用 long 就可以了。哈哈哈哈哈哈
    leon0903
        5
    leon0903   56 天前
    long 应该就可以了吧
    xuanbg
        6
    xuanbg   56 天前
    楼主的问题描述看得我都晕了,最后反应过来不就是 int 有符号不够大吗?不够大用 long 啊。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1619 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 34ms · UTC 01:59 · PVG 09:59 · LAX 17:59 · JFK 20:59
    ♥ Do have faith in what you're doing.