四个字节中的四个整数?

时间:2011-01-26 11:53:56

标签: java integer byte stanag

我想知道我是否可以就我目前正在做的一些工作提出一些建议。

我正在使用STANAG文档,该文档引用了以下内容:

  

ID号应形成为4字节数字。第一个(最重要的)字节应该是相关对象的标准NATO国家代码。有效国家代码的范围为0到99十进制......国家代码255(十六进制FF)应保留。

然后继续详细说明其他三个字节。在规范中,ID的类型为Integer 4,其中Integer n是有符号整数,n是1,2或4个字节。

我的问题,我承认这可能被认为是一个无知的问题而且我道歉,正如我们所知,整数是32位/ 4字节。例如,当第一个字节为99时,99是一个整数?

我非常感谢此处的任何澄清。

3 个答案:

答案 0 :(得分:4)

整数通常为4个字节。但是如果存储像99这样的小数字,则其他三个字节存储8x 0值位。该规范要求您使用一个整数存储(4字节)在其字节中存储4个不同的较小数字。

最简单的方法可能是在4字节的数组上使用toInt函数,例如(没有byte []长度检查也没有测试过这个函数 - 它只是说明性的)

public static final int toInt(byte[] b) 
{
    int l = 0;
    l |= b[0] & 0xFF;
    l <<= 8;
    l |= b[1] & 0xFF;
    l <<= 8;
    l |= b[2] & 0xFF;
    l <<= 8;
    l |= b[3] & 0xFF;
    return l;
}

byte[] bytes = new byte[] {99, 4, 9, 0};
int i = toInt(bytes, 0);

32位的int

11110101   00000100   00001001   00000000
^byte      ^byte      ^byte      ^byte

int中的每个8位块足以“编码”/“存储”较小的数字。因此,可以使用int将4个较小的数字混合在一起。

答案 1 :(得分:3)

“99”是数学上的整数,但不一定是Java视角中的Integerint。值99可以由short保持(例如,它是“短整数”的缩写),它是16位数据类型,或者在byte中,它是8-位数据类型。

所以基本上,你会想要将他们的ID事物看作一系列四个byte值。请注意Java的byte类型已签名。

答案 2 :(得分:1)

整数(外部计算)只表示没有小数的任何值,包括2,99,-5,34134,427391471244211等。 在计算术语中,整数(传统上)是一个32位数字,可以包含任何适合它的值。 该(计算)整数值的每个字节(8位)也是0到255之间的单个(数字)整数。