我正在使用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;
Java输出是:
crc[0] = -60; crc[1] = 11;
如何在两种语言中获得相同的结果?
答案 0 :(得分:9)
Java字节被签名(即在-128和127之间)。我想在C#中它们是未签名的。
3012 in binary是00001011 11000100
。
高位字节为11,无论它是否被视为有符号或无符号字节。
当您将低字节 - 11000100 - 视为无符号字节时,它是196
当您将其视为有符号字节时,它是-60。