2012-06-28 55 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); 
} 

从那里,你应该能够找出休息。