位移位和字节转换在 Java 和 C# 中给出不同的结果
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。
我正在用 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。