c# - C# 中的 ReadInt16 返回的内容与 Java 中的 writeShort 所写的不同

标签 c# java short

我正在用 Java 中的以下代码将短片写入文件:

RandomAccessFile file = new RandomAccessFile("C:\\Users\\PC\\Desktop\\myFile.bin", "rw");
file.writeShort(11734);
file.close();

当我用 Java 读回它时,我得到了相同的 (11734) 数字。但是,当我使用以下代码在 C# 中读取数字时:

string p = "C:\\Users\\PC\\Desktop\\myFile.bin";
short s = new BinaryReader(File.OpenRead(p)).ReadInt16();

变量 s 包含 -10707

这怎么会发生,有没有办法在 C# 中检索我用 Java 写入文件的数字?

最佳答案

BigEndian/LittleEndian 问题。见下文

byte[] b = BitConverter.GetBytes((short)11734);
var s = BitConverter.ToInt16(new byte[] {b[1],b[0] }, 0);

s 将为 -10707

您可以使用 IPAddress.HostToNetworkOrder 将一种形式转换为另一种形式。

var sh1 = IPAddress.HostToNetworkOrder((short)11734); //-10707
var sh2 = IPAddress.HostToNetworkOrder((short)-10707); //11734

您也可以创建自己的 BinaryReader

public class MyBinaryReader : BinaryReader
{
    public MyBinaryReader(Stream s)  : base(s)
    {
    }

    public override short ReadInt16()
    {
        return IPAddress.HostToNetworkOrder(base.ReadInt16());
    }
}

关于c# - C# 中的 ReadInt16 返回的内容与 Java 中的 writeShort 所写的不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12017244/

相关文章:

c# - WebBrowser 控件 onpropertychange 事件的事件处理程序 - sender 和 e 对象为 null

c# - 无法在安全透明方法安全级别问题中执行 CAS 断言

c# - 检测 JSON 中 null 属性和省略属性之间的差异

c# - 我可以在运行时编辑资源文件吗

基本扫描仪使用中的 java.util.NoSuchElementException

java - 在java中,我将如何进行计算,最大的数字减去较小的数字?

java - 使用 int 的位表示进行操作

facebook - 获取 fb.me 网址

java - 不使用用户名密码身份验证保护 servlet URL 的安全

c++ - 拼接一个短整数的第一个和最后一个 3 位数字?