2011-01-26 241 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之間的單獨(數字)整數。