如何在Java中为变量分配2个字节?

如何在Java中为变量分配2个字节? 我知道我可以这样做:

byte val = 2; // this is one byte with 0000 0010 

但我需要为val分配2个字节。 我怎样才能做到这一点?

除了使用两个字节的数组之外,您还可以使用short,这由Java语言规范保证为16位宽 。

 short x = 0x1234s; // assigns 0x34 to the lower byte, 0x12 to the higher byte. 

如果要将两个字节组合成一个short,则需要将高位字节移位8位并将它们按位或组合:

 byte b1 = 0x12; byte b2 = 0x34; short x = ((short)b1 << 8) | b2; 

如果要将不同的分配给单个字节变量,那么也可以使用右移和按位或运算符。 位n由(1 << n)标识。 0是字节的第一位,7是最后一位。 所以设置两位就像这样:

 byte b = (1<<3)|(1<<2); // b is set to 0000 1100 

你在寻找长度为2的字节数组吗? 在这种情况下:

 byte[] val = new byte[2]; val[0] = 2; val[1] = something else; 

您可以使用XOR在一个字段中存储两个值:)

 byte a, b, c; a = 5; b = 16; c = a ^ b; ... byte temp_a, temp_b; temp_a = c ^ 16; /* temp_a == 5 */ temp_b = c ^ 5; /* temp_b == 16 */ 

您可能已经注意到,您需要其中一个原始值来检索另一个,因此这种技术并不像位移方法那样有用。

 byte[] bytes = new byte[2]; bytes[0] = 2; bytes[0] = 26; 

使用字节数组,(短)整数或BitSet 。

你在谈论分配2个字节还是2个比特?

 byte b = 5; //0000 0101 

您可能还想尝试http://java.sun.com/j2se/1.4.2/docs/api/java/util/BitSet.html

您可能想看看Javolution的Struct类。 http://javolution.org/target/site/apidocs/javolution/io/Struct.html

它允许您布置具有固定长度成员和特定内存对齐的结构。 该实现由ByteBuffer支持,因此如果您与本机代码交互,则可以使用直接内存来分配它。