繁体   English   中英

字节顺序:将Java字节转换为C#

[英]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之间。

MDSN

字节:

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

  • .NET Framework类型:系统字节
  • 范围:字节0至255
  • 大小:无符号8位整数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM