Jos*_*sef 2 .net c# java bit-manipulation bit-shift
我在C#和Java中测试以下代码:
int lngCRC = 3012;
byte[] crc = new byte[2];
crc[0] = (byte)(lngCRC & 0xFF);
crc[1] = (byte)(lngCRC >> 8);
Run Code Online (Sandbox Code Playgroud)
C#输出是:
crc[0] = 196; crc[1] = 11;
Java输出是:
crc[0] = -60; crc[1] = 11;
如何在两种语言中获得相同的结果?
Java字节是有符号的(即-128到127之间).我想在C#中它们是未签名的.
二进制3012是00001011 11000100.
高字节为11,无论它是否被视为有符号或无符号字节.
当您将低字节 - 11000100 - 视为无符号字节时,它为196
当你将它视为有符号字节时,它是-60.