ByteBuffer.wrap().getInt() 在 c# 中等效
ByteBuffer.wrap().getInt() equivalent in c#
Java
byte[] input = new byte[] { 83, 77, 45, 71, 57, 51, 53, 70 };
int buff = ByteBuffer.wrap(input).getInt();
输出:1397566791
C#
byte [] array = { 83, 77, 45, 71, 57, 51, 53, 70 };
MemoryStream stream = new MemoryStream();
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(array);
}
byte[] bytes = stream.ToArray();
int buff = BitConverter.ToInt32(bytes, 0);
输出:1194151251
我不知道如何获得相同输出
谢谢
在 Java 的情况下,它按顺序获取前 4 个字节并将它们转换为 int。
System.out.println((((((83<<8)+77)<<8)+45)<<8)+71);
1397566791
在 C# 中,它以相反的顺序取前四个。
System.out.println((((((71<<8)+45)<<8)+77)<<8)+83);
1194151251
因此您需要阅读描述 类 操作的 API 文档并相应地使用它们。应该有办法颠倒字节顺序。
从 C# 到 Java 就像这样。
buff = ByteBuffer.wrap(input).order(ByteOrder.LITTLE_ENDIAN).getInt();
System.out.println(buff);
版画
1194151251
嗯,Int32
只包含 4
个字节,让我们在 Take(4)
的帮助下 Take
它们。接下来,我们必须考虑 ending(大或小)和 Reverse
这些 4
字节(如有必要):
using System.Linq;
...
byte[] array = { 83, 77, 45, 71, 57, 51, 53, 70 };
// 1397566791
int buff = BitConverter.ToInt32(BitConverter.IsLittleEndian
? array.Take(4).Reverse().ToArray()
: array.Take(4).ToArray());
Java
byte[] input = new byte[] { 83, 77, 45, 71, 57, 51, 53, 70 };
int buff = ByteBuffer.wrap(input).getInt();
输出:1397566791
C#
byte [] array = { 83, 77, 45, 71, 57, 51, 53, 70 };
MemoryStream stream = new MemoryStream();
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(array);
}
byte[] bytes = stream.ToArray();
int buff = BitConverter.ToInt32(bytes, 0);
输出:1194151251
我不知道如何获得相同输出
谢谢
在 Java 的情况下,它按顺序获取前 4 个字节并将它们转换为 int。
System.out.println((((((83<<8)+77)<<8)+45)<<8)+71);
1397566791
在 C# 中,它以相反的顺序取前四个。
System.out.println((((((71<<8)+45)<<8)+77)<<8)+83);
1194151251
因此您需要阅读描述 类 操作的 API 文档并相应地使用它们。应该有办法颠倒字节顺序。
从 C# 到 Java 就像这样。
buff = ByteBuffer.wrap(input).order(ByteOrder.LITTLE_ENDIAN).getInt();
System.out.println(buff);
版画
1194151251
嗯,Int32
只包含 4
个字节,让我们在 Take(4)
的帮助下 Take
它们。接下来,我们必须考虑 ending(大或小)和 Reverse
这些 4
字节(如有必要):
using System.Linq;
...
byte[] array = { 83, 77, 45, 71, 57, 51, 53, 70 };
// 1397566791
int buff = BitConverter.ToInt32(BitConverter.IsLittleEndian
? array.Take(4).Reverse().ToArray()
: array.Take(4).ToArray());