好吧,所以我已經搜索和搜索,沒有任何工作... 我有這個int數組,每個int只佔用低位字節。舉例來說,我有Java - 寫一個int的第一個字節
data[0] = Ox52
data[1] = Oxe4
data[2] = Ox18
data[3] = Oxcb
我想要的標準輸出中只包含那些字節(或者換句話說,如果我寫這篇文章的一個文件,我檢查用十六進制編輯器中的文件,我應該看到):
52e418cb
我該怎麼做?
謝謝您的幫助
好吧,所以我已經搜索和搜索,沒有任何工作... 我有這個int數組,每個int只佔用低位字節。舉例來說,我有Java - 寫一個int的第一個字節
data[0] = Ox52
data[1] = Oxe4
data[2] = Ox18
data[3] = Oxcb
我想要的標準輸出中只包含那些字節(或者換句話說,如果我寫這篇文章的一個文件,我檢查用十六進制編輯器中的文件,我應該看到):
52e418cb
我該怎麼做?
謝謝您的幫助
下似乎很好地工作。我正在使用OutputStream.write(int)
方法。
int[] ints = new int[] { 0x52, 0xe4, 0x18, 0xcb };
FileOutputStream os = new FileOutputStream(new File("/tmp/x"));
for (int i : ints) {
os.write(i);
}
os.close();
結果:
> hexdump /tmp/x
0000000 52 e4 18 cb
它確實有用,非常感謝! – Totor 2012-03-06 21:41:19
這樣做的正確的方法是根據它們的期望的位置的字節數到移位和然後使用OR運算符拼接起來。但是,在移位之前,您還應該在字節的低8位執行位掩碼。這是需要的,因爲一個字節首先被轉換爲一個int(在轉換完成之前)。這沒什麼大不了的,但是當最高位爲1(即:該字節爲負數)時,您的整數也會變爲負數,這會導致所有前導位設置爲1.
因此:
(byte) 10000000 = (int) 11111111 11111111 11111111 10000000
在OR運算符中使用負的int值會導致錯誤的結果。所以,工作線是這樣的:
((data[0] & 0xFF) << 24) | ((data[1] & 0xFF) << 16) | ((data[2] & 0xFF) << 8) | (data[3] & 0xFF)
爲什麼不使用'byte'數組? – moooeeeep 2012-03-06 21:27:25
因爲我正在嘗試爲我的個人使用調整AES實現,並且它使用int數組。我仍然無法使它工作,我有一個16 int(因此,我應該得到16個字節)的數組,因此最終得到24個字節。< – Totor 2012-03-06 21:38:50
所以你的實際問題是如何寫入二進制數據到標準輸出? – moooeeeep 2012-03-06 21:42:47