java - 在 Java 中与字节相互转换

标签 java byte

我无法理解字节之间的相互转换,或者一般情况下的字节

byte b = (byte)170;
System.out.println("Byte to int" + (int)b);

为什么当我将 170 转换为一个字节然后将该字节转换为一个 int 时我得到 -86,正确的方法是什么?

编辑:好的,所以我的问题的答案非常简单(byte 范围从 -128 到 127)... 让我感到困惑的是,我真正想要的是二进制 10101010 在字节中,所以我想用 int 表示该数字并将其放入字节中。有人可以告诉我如何将该二进制数转换为一个字节吗?

最佳答案

170作为32位整数的二进制表示是

0000 0000 0000 0000 0000 0000 1010 1010 

当您将其转换为 byte 时,它将变为 1010 1010。由于 Java 中的所有整数都是有符号的,因此它将 1010 1010 视为 2's complement 8 位整数。那是 -86。

当您使用 (int) b 将此字节转换回整数时,它会得到 signed extended到:

1111 1111 1111 1111 1111 1111 1010 1010 

这也是 -86。你想给它应用一个位掩码,所以它又变成了 170。

(int) (0xff & b) 将返回 170:

1111 1111 1111 1111 1111 1111 1010 1010 
0000 0000 0000 0000 0000 0000 1111 1111 & (bitwise and)
---------------------------------------
0000 0000 0000 0000 0000 0000 1010 1010 

关于java - 在 Java 中与字节相互转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8175455/

相关文章:

java - HttpClient.execute 抛出 OutOfMemoryError

java - 如何将-t参数传递给fabric8 docker-maven-plugin?

java - Android - NoClassDefFoundError 与从其他非 Android 项目生成的 .jar

java - Java 'timeline' 库存在什么?

c# - 字节转换为 INT64,底层

Java ByteBuffer.wrap(byte[]),如果 byte[] 按小尾数排序,尾数会发生什么变化

java - 有人可以解释在 java 中从字节数组到十六进制字符串的转换吗

python - 从字节创建 .wav 文件

java - 如果表存在则跳过 liquibase 更改

c - sizeof 是否返回 C 中某种类型的字节数或八位字节数?