0

当我直接分配vlanid=0x960.(十六进制值)时,效果很好。但是当我出于同样的目的使用 java 函数时,它被存储为十进制值。我在这里附上了代码。

int vlanid,

short vlanid1;

vlanid= (int) jSpinner1.getModel().getValue();

vlanid1 = Short.parseShort(((Integer.toHexString(vlanid))),16);
4

2 回答 2

3

您似乎没有理解评论中给出的信息,所以这里有一个示例,它向您展示了最初存储为“十进制”还是“十六进制”并不重要

    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 方法,因为您明确提到了屏蔽整数值。除非您必须对位掩码做一些特殊的事情,否则我强烈建议您使用更简单的转换方法,因为输出值没有功能差异。

于 2013-05-31T06:51:33.527 回答
0

该数字始终存储为二补二进制。但是,当您显示此数字时,您通常会看到 Short.toString(short) 的结果,默认情况下会生成小数。

您如何描述数字的格式并不重要,也不会存储。只有值很重要,这可以显示为十进制(默认值)或您想要的任何其他基数,从基数 2 到基数 36。

于 2013-05-31T09:09:29.777 回答