如何使用java在短变量中存储十六进制值?

时间:2013-05-31 06:00:25

标签: java

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

int vlanid,

short vlanid1;

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

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

2 个答案:

答案 0 :(得分: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

修改

在回复您的评论时,我添加了一个使用两种不同方法从int转到short的示例。你似乎被抓住的是int should be in hexadecimal value;这不是值的存储方式(无论是int,short,long等都无关紧要)。 所有这些类型都在内部存储为二进制补码整数See this post)。因此,在下面的示例中,int1int2代表相同的值

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

答案 1 :(得分:0)

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

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