当我直接分配vlanid=0x960
.(十六进制值)时,效果很好。但是当我出于同样的目的使用 java 函数时,它被存储为十进制值。我在这里附上了代码。
int vlanid,
short vlanid1;
vlanid= (int) jSpinner1.getModel().getValue();
vlanid1 = Short.parseShort(((Integer.toHexString(vlanid))),16);
当我直接分配vlanid=0x960
.(十六进制值)时,效果很好。但是当我出于同样的目的使用 java 函数时,它被存储为十进制值。我在这里附上了代码。
int vlanid,
short vlanid1;
vlanid= (int) jSpinner1.getModel().getValue();
vlanid1 = Short.parseShort(((Integer.toHexString(vlanid))),16);
您似乎没有理解评论中给出的信息,所以这里有一个示例,它向您展示了最初存储为“十进制”还是“十六进制”并不重要
short short1 = 0x10;
short short2 = 16;
short short3 = (short) (short1 + short2);
System.out.println("Short1: " + short1 + ", " + Integer.toHexString(short1));
System.out.println("Short2: " + short2 + ", " + Integer.toHexString(short2));
System.out.println("Short3: " + short3 + ", " + Integer.toHexString(short3));
输出:
Short1: 16, 10
Short2: 16, 10
Short3: 32, 20
编辑:
为了回应您的评论,我添加了一个使用两种不同方法从 aint
转到 a的示例。short
你似乎被抓住的是 int should be in hexadecimal value
; 这不是值的存储方式(不管它是 int、short、long 等)。所有这些类型都在内部存储为二进制补码整数(参见这篇文章)。因此在下面的示例中,两者都int1
表示int2
相同的值
int int1 = 0x01b213d4; // Stored as: 1101100100001001111010100
int int2 = 28447700; // Stored as: 1101100100001001111010100
short short1Cast = (short) int1;
short short1Mask = (short) (int1 & 0xFFFF);
short short2Cast = (short) int2;
short short2Mask = (short) (int2 & 0xFFFF);
System.out.println("Int1: " + int1 + ", " + Integer.toHexString(int1) + ", " + short1Cast + ", " + short1Mask);
System.out.println("Int2: " + int2 + ", " + Integer.toHexString(int2) + ", " + short2Cast + ", " + short2Mask);
输出:
Int1: 28447700, 1b213d4 | Short1: 5076, 5076
Int2: 28447700, 1b213d4 | Short2: 5076, 5076
我在这里保留了 cast 方法和 mask 方法,因为您明确提到了屏蔽整数值。除非您必须对位掩码做一些特殊的事情,否则我强烈建议您使用更简单的转换方法,因为输出值没有功能差异。
该数字始终存储为二补二进制。但是,当您显示此数字时,您通常会看到 Short.toString(short) 的结果,默认情况下会生成小数。
您如何描述数字的格式并不重要,也不会存储。只有值很重要,这可以显示为十进制(默认值)或您想要的任何其他基数,从基数 2 到基数 36。