2009-08-18 73 views
0

将Java应用程序转换为C#时,我遇到了一个奇怪且非常烦人的代码,这对于原始版本非常重要并且很有用。字节顺序:将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; 
} 

这是造成铸造错误的部分是套入字节255的buf[i]:而在Java它工作得很好,因为java.lang.Byte跨度从0到255,从.NET 0 System.Byte跨度为254 由于此限制,在应用程序的C#版本的输出是不是255,正如所料,缓冲区包含一套254

谁能给我一个可行的替代方案?

非常感谢您的支持。

+9

嗯,是什么让你觉得一个.NET字节不去255? – 2009-08-18 20:22:18

+0

http://msdn.microsoft.com/en-us/library/5bdb6693(VS.80).aspx - 范围是255.代码中是否还有其他内容? – 2009-08-18 20:27:50

+1

Java字节是有符号的,所以(字节)255是(字节)-1。不知道这是否会有所作为。 – 2009-08-18 20:34:06

回答

3

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

1

我认为这可能是因为你正在将255整数文字转换为一个字节,而不是分配一个字节值。我建议您尝试使用Byte.MaxValue来代替。 Byte.MaxValue有255

的值。例如:

buf[i] = byte.MaxValue; 

编辑:我错了; (byte)255肯定评估为255;我刚刚在VS中确认。必须做些什么来改变代码中的其他地方。

+0

”此常量的值为255(十六进制0xFF)。“ – 2009-08-18 20:25:01

+0

我知道这一点。但他试图将255是一个整数字面值转换为一个字节。我认为* *可能会导致他一直看到的问题。我建议使用Byte.MaxValue,其值为255,而不是使用演员表。我将编辑并澄清。 – Randolpho 2009-08-18 20:27:18

+0

不,您可以将255转换为字节。 – 2009-08-18 20:27:44

0

byte.MaxValue等于255

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

0

MDSN

字节:

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

  • .NET Framework类型:系统字节
  • 范围:字节0到255
  • 尺寸:无符号8位整数