Java到C#的翻译

时间:2014-05-25 22:54:30

标签: java c#

当我在Java中运行以下代码时,我得到输出:[B@1ddcac5

Java代码

byte[] byteA = "test".getBytes("UTF-8");
System.out.println(String.valueOf(byteA));

如果我尝试在C#中运行类似的代码,我只会得到:System.Byte[]

C#代码

Console.WriteLine(Encoding.UTF8.GetBytes("test"));

如何在C#中获得与在Java中相同的输出?

由于

3 个答案:

答案 0 :(得分:6)

您应该首先修复Java程序:

byte[] byteA = "test".getBytes("UTF-8");
System.out.println(Arrays.toString(byteA));

Demo on ideone.

现在用C#打印你的数组 - 两个输出开始相互匹配:

byte[] byteA = Encoding.UTF8.GetBytes("test");
for (int i = 0 ; i != byteA.Length ; i++) {
    Console.Write("{0} ", byteA[i]);
}

Demo on ideone.

答案 1 :(得分:4)

这是相同的输出。只有java打印对象的默认类型和内存地址。在C#中,只打印类型。

输出[B@1ddcac5与其内容无关,[B指定对象是字节数组(因此相当于System.Byte[]),Java也打印标识hash,在这种情况下是1ddcac5(它由对象的存储位置决定,所以如果你第二次运行你的程序,哈希就会改变)。您可以而只是打印:

Console.WriteLine("[B@1ddcac5");

但当然语义不一样。

答案 2 :(得分:4)

你不能因为 [B @ 1ddcac5 是由Java创建的类<​​strong>实例标识符(类似于内存地址)。如果多次运行代码,输出应该会改变。