2012-06-28 100 views
2

我需要驗證一個類中生成的代碼與另一個類中驗證的代碼是否相同。但是其他類別的扭曲使用的邏輯是不同的。就像這樣。將單個字節與字節數組進行比較

A類:

字符串= 「0A2D」(假設) 我使用的子方法,取出0A,2D,並將其轉換成十進制值&將它們存儲爲字節。 最終結果看起來像這樣

int a1 =(byte)Integer.parseInt(s,16);這裏s = 0A
int a2 =(byte)Integer.parseInt(s,16);這裏S = 2D

所以A1將是10(1字節存儲器),A2將是45(1字節存儲器)

類別:

在該類我應該使用的方法的getBytes( )。但是當我使用它,我看到一些奇怪的O/P說[B @ ......首先,我需要有關實際發生的事情的信息。它如何被編碼。其次,O /這裏p應該與A級即O/P匹配字節數組

字節[] B = {A1A2}(存儲器2字節) B = {1045}

因此,在結尾A會有2個值,每個1byte。但是B會有一個數組,它有相同的兩個值,但內存大小爲2個字節。

我希望我在我的問題中清楚&沒有混淆。

您的善意幫助將不勝感激。提前致謝。

回答

0

什麼代碼行輸出「[B @ ......」? (我假設這些點意味着你截斷了輸出。)這個特定的輸出看起來好像你試圖打印數組參考而不是數組的元素。您應該使用for循環來打印單個元素或使用Array.toString()來獲取數組的字符串表示形式。

0

你的語言是稍微不清楚,但我認爲下面會做你想要什麼:

byte[] b = new byte[] { a1, a2 }; 

陣列初始化是語言的一個非常有用的功能。

0

也許你只是在打印錯了,當打印陣列使用Arrays.toString(ARR)

我認爲,當你說的byte [] B = {A1A2}你的意思是字節[] B = {A1,A2}

0

如果你想打印出一個byte []的內容,你需要先將它轉換成一個字符串。

這裏是一個有用的方法,以字節數組轉換成可讀的字符串:

public static String toHexString(byte[] data) 
{ 
    if (data == null) return ""; 

    char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 
    char[] hexChars = new char[data.length * 2]; 
    int v; 

    for (int j = 0; j < data.length; j++) 
    { 
     v = data[j] & 0xFF; 
     hexChars[j*2] = hexArray[v/16]; 
     hexChars[j*2 + 1] = hexArray[v%16]; 
    } 

    return new String(hexChars); 
} 

從那裏,你應該能夠找出休息。