如何在Java中显示十六进制/字节值

3
int myInt = 144;
byte myByte = /* Byte conversion of myInt */;

输出应该为myByte : 90(十六进制值为144)。

所以,我做了以下操作:

byte myByte = (byte)myInt;

我得到了myByte : ffffff90的输出。:(

我该如何摆脱这些ffffff?


2
为什么应该是90?你没有进行十六进制转换。值144超出了“byte”范围并将溢出,因此该值为负数。 - Rohit Jain
1
不幸的是,现在这被标记为错误问题的重复,因为问题并不是关于如何将 int 转换为 byte(尽管标题不正确),而是关于在将 byte 转换回 int 时如何去除额外的1位。投票重新开放 - 或许可以将其关闭为更合适的问题的重复。 - ajb
非常抱歉,如果我搞砸了这个:),我是一名C++开发人员,也是Java的新手,在C++中我知道如何做到这一点,int -> unsigned int -> unsigned char,但在Java中我真的很困惑。 - Jyo the Whiff
2个回答

7

byte 是一种有符号类型。它的值在-128到127的范围内,而144不在这个范围内。Java中没有无符号的byte类型。

如果您使用的是Java 8,则将其视为0到255范围内的值的方法是使用Byte.toUnsignedInt

String output = String.format("%x", Byte.toUnsignedInt(myByte));

(我不知道您是如何格式化十六进制输出的,这不重要)
在Java 8之前,最简单的方法是:
int byteValue = (int)myByte & 0xFF;
String output = String.format("%x", byteValue);

在你执行这两项操作之前,请确保你真的需要使用 byte。很可能你不需要,如果你要表示值为144,而没有必要使用 byte,只需使用 int 即可。


2

感谢@ajb和@sumit,我使用了两个答案,

int myInt = 144;

byte myByte = (byte) myInt;

char myChar = (char) (myByte & 0xFF);

System.out.println("myChar :"+Integer.toHexString(myChar));

o/p,

myChar : 90

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接