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

2019-11-28 13:52:47 +08:00
 xuroid
服务器发给客户端的数据中有四个字节是 unsigned int 型的字节数据,怎么用 Java 转换成 int 呢?
说是十六位数据,去掉符号位,再转 int,可是不太会操作哎,直接每个元素&0xff 出来的结果不对。小白请求了。
9580 次点击
所在节点    Android
6 条回复
xuroid
2019-11-28 14:26:54 +08:00
已解决,这种弱智问题真不应该马上发出来问大家,又删不了贴子。
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
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
2019-11-28 17:21:29 +08:00
用 long 就可以了。哈哈哈哈哈哈
leon0903
2019-11-28 17:25:37 +08:00
long 应该就可以了吧
xuanbg
2019-11-28 17:57:19 +08:00
楼主的问题描述看得我都晕了,最后反应过来不就是 int 有符号不够大吗?不够大用 long 啊。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/623939

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX