在Java中向int动态添加0x前缀
假设voiddraw希望颜色以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
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)