gpt4 book ai didi

c# - 在 C# 中使用 BinaryReader 编写 Java ObjectOutputStream.writeInt() 读取?

转载 作者:行者123 更新时间:2023-11-29 06:09:34 25 4
gpt4 key购买 nike

好的,所以我有一个用 Java 编写的游戏 map 创建器,它使用 ObjectOutputStream.writeInt() 将 map 写入文件

现在我正在将游戏引擎转换为 C# XNA,并且正在尝试加载 map 。不过我遇到了数字错误,所以我想知道是否有人知道我做错了什么?

我相信 Java 写为 int 32 Big Endian(尽管我可能是错的)。

这是我用 C# 读取 map 高度和宽度的代码。

编辑:br 是 BinaryReader。

width = (int)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(br.ReadBytes(sizeof(int)), 0));
height = (int)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(br.ReadBytes(sizeof(int)), 0));

谁能告诉我我做错了什么?或者如何在 C# 中正确读取 ObjectOutputStream.writeInt() 中的字节?

编辑:第二次尝试失败。这是当前代码:

public byte[] ReadBigEndianBytes(int count, BinaryReader br)
{
byte[] bytes = new byte[count];
for (int i = count - 1; i >= 0; i--)
bytes[i] = br.ReadByte();

return bytes;
}

public void loadFile(int level)
{
FileStream fs = new FileStream("map" + level + ".lv", FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs, System.Text.Encoding.BigEndianUnicode);

width = BitConverter.ToInt32(ReadBigEndianBytes(4, br), 0);
height = BitConverter.ToInt32(ReadBigEndianBytes(4, br), 0);

tile = new int[width, height];

for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
tile[x, y] = BitConverter.ToInt32(ReadBigEndianBytes(4, br), 0);
}
}

}
}

最佳答案

ObjectOutputStream.writeInt()

不要使用它。使用 DataOutputStream.writeInt()。它以网络字节顺序执行相同的操作,但它不添加 ObjectOutputStream 添加的 Serialziation header ,因此您不必在 .NET 端跳过它。

关于c# - 在 C# 中使用 BinaryReader 编写 Java ObjectOutputStream.writeInt() 读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7393756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com