0

在将 Java 应用程序转换为 C# 时,我遇到了一段奇怪且非常烦人的代码,这很重要并且在原始版本中有效。

byte[] buf = new byte[length];
byte[] buf2 = bout.toByteArray();
System.arraycopy(buf2, 0, buf, 0, buf2.length);;
for (int i = (int) offset; i < (int) length; ++i) {
  buf[i] = (byte) 255;
}

导致转换错误的部分是buf[i]字节 255 的设置:而在 Java 中它工作正常,因为java.lang.Byte跨度从 0 到 255,.NETSystem.Byte跨度从 0 到 254。由于这个限制,C# 版本中的输出应用程序的关键在于,缓冲区包含一组 254,而不是预期的 255。

谁能给我一个可行的选择?

非常感谢您的支持。

4

5 回答 5

3

我认为你误诊了你的问题:.NET 字节和其他人一样是 8 位的。更好的方法是尝试理解 Java 代码试图做什么,然后找出 C# 中最干净的等价物。

于 2009-08-18T20:24:28.907 回答
1

我认为这可能是因为您将 255 整数文字转换为一个字节,而不是分配一个字节值。我建议您尝试改用 using Byte.MaxValue。Byte.MaxValue 的值为 255。

例如:

buf[i] = byte.MaxValue;

编辑:我错了;(byte)255肯定评估为 255;我刚刚在VS中确认了。一定有你正在做的事情导致代码中其他地方的更改。

于 2009-08-18T20:24:25.723 回答
0

byte.MaxValue等于 255。

该常数的值为 255(十六进制 0xFF)。

于 2009-08-18T20:24:34.587 回答
0

根据 MSDN: http: //msdn.microsoft.com/en-us/library/5bdb6693 (VS.71).aspx,你对这个 C#“限制”绝对确定吗?

C# 字节是一个无符号的 8 位整数,其值可以在 0 到 255 之间。

于 2009-08-18T20:24:37.377 回答
0

来自MDSN

字节:

byte 关键字表示存储值的整数类型,如下表所示。

  • .NET 框架类型:系统字节
  • 范围:字节 0 到 255
  • 大小:无符号 8 位整数
于 2009-08-18T20:26:38.327 回答