[英]Byte order: converting java bytes to 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 System.Byte
范围从0到254。由于存在此限制,因此在C#版本的应用程序中输出的结果是,缓冲区包含一组254,而不是预期的255。
谁能给我一个可行的选择?
非常感谢您的支持。
我认为您误诊了您的问题:.NET字节像其他所有人一样都是8位的。 更好的方法是尝试了解Java代码要执行的操作,然后找出C#中最干净的等效代码。
我认为这可能是因为您将255整数文字转换为字节,而不是分配字节值。 我建议您尝试改用Byte.MaxValue
。 Byte.MaxValue的值为255。
例如:
buf[i] = byte.MaxValue;
编辑:我错了; (byte)255
肯定为255; 我刚刚在VS中确认过。 您必须执行某种操作来导致代码中其他地方的更改。
byte.MaxValue
等于255。
该常数的值为255(十六进制0xFF)。
根据MSDN,您对C#“限制”是否绝对确定: http : //msdn.microsoft.com/zh-cn/library/5bdb6693(VS.71).aspx
C#字节是一个无符号的8位整数,其值的范围可以在0到255之间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.