按位移位和字节转换在Java和C中给出了不同的结果#
我正在用C#和Java测试以下代码:按位移位和字节转换在Java和C中给出了不同的结果#,java,c#,.net,bit-manipulation,bit-shift,Java,C#,.net,Bit Manipulation,Bit Shift,我正在用C#和Java测试以下代码: int lngCRC = 3012; byte[] crc = new byte[2]; crc[0] = (byte)(lngCRC & 0xFF); crc[1] = (byte)(lngCRC >> 8); C#输出为: crc[0] = 196; crc[1] = 11; crc[0] = -60; crc[1] = 11; crc[0]=196; crc[1]=11; Java输出为: crc[0] = 196;
int lngCRC = 3012;
byte[] crc = new byte[2];
crc[0] = (byte)(lngCRC & 0xFF);
crc[1] = (byte)(lngCRC >> 8);
C#输出为:
crc[0] = 196;
crc[1] = 11;
crc[0] = -60;
crc[1] = 11;
crc[0]=196;
crc[1]=11;
Java输出为:
crc[0] = 196;
crc[1] = 11;
crc[0] = -60;
crc[1] = 11;
crc[0]=-60;
crc[1]=11;
如何在两种语言中获得相同的结果?Java字节是有符号的(即介于-128和127之间)。我猜在C#中,它们是未签名的
二进制的3012是00001011000100
更高的字节是11,不管它被视为有符号字节还是无符号字节
当您将低位字节11000100视为无符号字节时,它是196
当您将其视为有符号字节时,它是-60。这一点。在C#中,
byte
的有符号等价物是sbyte
(又名System.sbyte
)。现在我改为sbyte,但在crc[1]中是0而不是11。问题是如何将Java代码翻译成C#代码并具有相同的输出。@Josef我刚刚测试过它,并且var crc=new[](sbyte)(lngCRC&0xFF),(sbyte)(lngCRC>>8)};代码>对我有用。那你一定是做错了什么。。。张贴你的C#代码。