在Java中向int动态添加0x前缀

在Java中向int动态添加0x前缀,java,hex,literals,Java,Hex,Literals,假设voiddraw希望颜色以0x前缀开头,如下所示 int i = 16777215; void draw(int color) { } 如果我尝试这个,它会抛出一个语法错误 draw(0x16777215) int i不能包含0x部分,需要动态添加它 谢谢请通过i。没有一种方法需要以0x开头的数字。如果它接受一个int,那么它将接受任何int,指定为带0x或不带0x的十六进制文字 另外,要小心0x16777215与167772150x1234只是另一种写入整数值的方式不同。例如,0

假设voiddraw希望颜色以0x前缀开头,如下所示

int i = 16777215;

void draw(int color) {


}
如果我尝试这个,它会抛出一个语法错误

draw(0x16777215)
int i不能包含0x部分,需要动态添加它


谢谢

请通过
i
。没有一种方法需要以
0x
开头的数字。如果它接受一个
int
,那么它将接受任何
int
,指定为带
0x
或不带
0x的十六进制文字


另外,要小心
0x16777215
16777215

0x1234
只是另一种写入整数值的方式不同。例如,
0xff
255
是完全相同的东西
draw(0x16777215)
draw(376926741)
是相同的调用。在字节码级别,没有任何区别。唯一的区别在于它在人类阅读代码时的表现;有时更容易用字节来思考,字节很容易用十六进制表示

如果数字以
0x
开头,则表示其余数字解释为十六进制。我猜您想要的不是
0x16777215
,而是
16777215
(没有
0x
),也就是
0xFFFFFF

这个网站有更多的信息(比我更权威:)

为了证明它在引擎盖下是一样的,您可以查看一些反汇编代码。考虑这个类:

draw(0x + i)

Invalid hex literal number
编译
Hexes.java
后运行
javap-c Hexes
将向您展示引擎盖下发生的事情:

public class Hexes {
  public static int alpha = 0x16777215;
  public static int beta = 376926741;
}
输出:

public class HexesPrinter {
    public static void main(String[] args) {
        System.out.println(Hexes.alpha);
        System.out.println(Hexes.beta);
    }
}
我想你需要这个:

376926741
376926741

您首先需要了解在Java中指定以10为基数的数字和以16为基数的数字(十六进制)之间的区别。正如其他人所说,
0x
是一个数字的前缀,表示它是以16进制(十六进制)为基数的


用十六进制表示法指定颜色是很有用的,因为它们有分量(Alpha、R、G、B),当你把它们放在10进制中时,这些分量并不明显。查看此答案了解更多详细信息:

我认为您误解了
0x
的目的。它用于整数文本。16777215(十进制)和0x16777215(十六进制)是两个完全不同的值。你需要弄清楚你想要哪一个。我真的不知道如何分解一些代码来增加你的答案。这个问题实际上是关于Java语法和语义的。如果你需要支持证据,要么写一个程序,产生一些输出。。。或者引用Oracle Java教程或JLS的相关部分等知名来源。反汇编的目的是表明,就编译程序而言,两个值都只是
int 376926741
。但我还要加上一条引文——这是一个很好的建议。我有类似字符串的字符串hex=“803BB9FF”;我想把它转换成int color=0x803BB9FF,请帮助Long color=Long.valueOf(hex,16);//用十六进制表示你的字符串
376926741
376926741
Integer.valueOf(String.valueOf(i), 16)