如何解决等效于C#的ByteBuffer.wrapgetInt
Java
byte[] input = new byte[] { 83,77,45,71,57,51,53,70 };
int buff = ByteBuffer.wrap(input).getInt();
输出:1397566791
C#
byte [] array = { 83,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
我不知道如何获得相同输出
谢谢
解决方法
好吧,Int32
仅包含4
个字节,借助Take
让我们Take(4)
个字节。接下来,我们必须考虑 end (大或小),并在必要时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情况下,它将按顺序获取前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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。