2

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

A类:

String = "0A2D" (假设)我使用了 substring 方法,取出 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 字节内存)

B类:

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

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

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

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

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

4

4 回答 4

0

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

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

数组初始化器是该语言的一个非常有用的特性。

于 2012-06-28T00:17:55.257 回答
0

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

于 2012-06-28T00:40:43.643 回答
0

打印数组时,您可能只是打印错了使用 Arrays.toString(arr)

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

于 2012-06-28T01:10:18.730 回答
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);
}

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

于 2012-06-28T03:00:59.160 回答