[英]Bitwise shift and byte cast gives different results in Java and C#
我在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;
如何在两种语言中获得相同的结果?
Java字节是有符号的(即-128到127之间)。 我想在C#中它们是未签名的。
二进制3012是00001011 11000100
。
高字节为11,无论它是否被视为有符号或无符号字节。
当您将低字节 - 11000100 - 视为无符号字节时,它为196
当你将它视为有符号字节时,它是-60。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.