将单个字节与字节数组进行比较

时间:2012-06-28 00:14:35

标签: java string byte

我需要验证一个类中生成的代码与另一个类中验证的代码相同。但是扭曲在其他类中使用的逻辑是不同的。就像这样。

A类:

String =“0A2D”(假设) 我使用了子串方法,取出0A,2D并将它们转换为十进制值&将它们存储为字节。 最终结果看起来像这样

int a1 =(byte)Integer.parseInt(s,16);这里s = 0A
 int a2 =(byte)Integer.parseInt(s,16);这里s = 2D

所以a1将是10(1byte内存),a2将是45(1byte内存)

B组:

在这个类中,我应该使用方法getBytes()。但是当我使用它时,我看到一些奇怪的o / p说[B @ ......首先,我需要有关实际发生的事情的信息。它是如何编码的。其次,这里的o / p应该是与A类的o / p匹配的字节数组,即

byte [] b = {a1a2}(内存2字节) b = {1045}

所以最后A将有2个值,每个值为1byte。但是B将有一个具有相同的两个值的数组,但内存大小将是2字节。

我希望我的问题清楚并没有混淆。

您的帮助将不胜感激。提前谢谢。

4 个答案:

答案 0 :(得分:0)

您的语言稍有不清楚,但我认为以下内容可以满足您的需求:

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

数组初始值设定项是该语言非常有用的功能。

答案 1 :(得分:0)

什么行代码输出“[B @ ......”? (我假设这些点意味着您截断了输出。)此特定输出看起来好像您正在尝试打印数组 reference 而不是数组的元素。您应该使用for循环来打印单个元素,或者使用Array.toString()来获取数组的String表示。

答案 2 :(得分:0)

当打印数组使用Arrays.toString(arr)

时,可能只是打印错误

我假设你说byte [] b = {a1a2}你的意思是byte [] b = {a1,a2}

答案 3 :(得分:0)

如果要打印出byte []的内容,首先需要将其转换为String。

这是将字节数组转换为可读字符串的有用方法:

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

从那里你应该能够解决剩下的问题。