在将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。
有人能给我一个可行的选择吗?
非常感谢您的支持。
答案 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)