字节顺序:将java字节转换为c#

时间:2009-08-18 20:20:24

标签: c# .net porting

在将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 {{1}从0到254跨越。 由于这个限制,应用程序的C#版本中的输出是而不是255,正如预期的那样,缓冲区包含一组254。

有人能给我一个可行的选择吗?

非常感谢您的支持。

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

例如:

buf[i] = byte.MaxValue;

编辑:我错了; (byte)255肯定评估为255;我刚刚在VS中证实了。必须要做一些事情才能在代码中的其他地方进行更改。

答案 2 :(得分:0)

byte.MaxValue等于255。

  

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

答案 3 :(得分:0)

根据MSDN:http://msdn.microsoft.com/en-us/library/5bdb6693(VS.71).aspx

,你是否完全确定这个C#“限制”

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

答案 4 :(得分:0)

来自MDSN

字节:

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

  • .NET Framework类型:System Byte
  • 范围:字节0到255
  • 大小:无符号8位整数