2011-01-26 57 views
4

我不知道我是否可以就我目前正在做的一些工作寻求一些建议。四个字节中的四个整数?

ID号应被形成为4个字节的数字:

我从STANAG文档它引用的是下列工作。第一个(最重要的)字节应该是所讨论对象的标准北约国家代码。有效的国家代码范围为0到99十进制......国家代码255(十六进制FF)应保留。

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

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

我非常感谢在这里的任何澄清。

+1

4586如何对待你? – I82Much 2011-01-26 12:15:41

+0

可怕的是,老实说:) – Myn 2011-01-26 12:22:21

+0

哇,我以为我是世界上唯一做4586的人! – 2013-06-07 16:35:15

回答

4

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

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

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); 

在INT 8个比特的一个int

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

每个块的32位足以“编码”/“存储”较小的数字。因此可以使用int将4个较小的数字拼凑在一起。

3

从Java的角度来看,“99”是数学上的整数,但不一定是Integerint。例如,值99可以由short(其为短整数)(其是16位数据类型)或byte(其是8位数据类型)来保存。

所以基本上,你会想看他们的身份证事情作为一系列的四个byte值。请注意,Java的byte类型已签名。

1

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