joe 发表于 2022-9-9 16:45:10

Java中对于unsigned byte类型的转换处理

java中本来没有unsigned byte这么一种数据类型,只有对应的byte类型,当然,byte范围是-128~127,但我们知道一个字节可以表达0~255,可java将byte的最高bit当作符号位了,所以,我们在通信缓冲区中处理数据时,有可能需要将一个byte当作"unsigned byte"来对待,
那怎么处理呢?
byte rawbytedata = -1; //-1其实就是1111 1111
int unsignedintdata = rawbytedata & 0xFF;
下面,具体说明这样做的原理。
0xff 表示为二进制就是 1111 1111。在signed byte类型中,代表-1;但在short或者int类型中则代表255.
当把byte类型的-1赋值到short或者int类型时,虽然值仍然代表-1,但却由1111 1111变成1111 1111 1111 1111.
再将其与0xff进行掩码:
-1: 11111111 1111111
0xFF: 00000000 1111111
255: 00000000 1111111
所以这样,-1就转换成255.

页: [1]
查看完整版本: Java中对于unsigned byte类型的转换处理