【问题标题】:Equivalent of Java's "ByteBuffer.putType()" in C#等效于 C# 中 Java 的“ByteBuffer.putType()”
【发布时间】:2009-08-11 16:39:34
【问题描述】:

我正在尝试通过从 Java 移植代码来格式化 C# 中的字节数组。在 Java 中,使用方法“buf.putInt(value);”、buf.putShort、buf.putDouble(等等)。但是我不知道如何将其移植到 C#。我已经尝试过 MemoryStream 类,但是没有方法可以将特定类型放在字节数组的末尾。

问题:C#中Java的“ByteBuffer.putType(value)”等价物是什么? 谢谢!

【问题讨论】:

    标签: c# java memorystream bytebuffer


    【解决方案1】:

    您可以使用BinaryWriter 和您的 MemoryStream:

    MemoryStream stream = new MemoryStream();
    using (BinaryWriter writer = new BinaryWriter(stream))
    {
        writer.Write(myByte);
        writer.Write(myInt32);
        writer.Write("Hello");
    }
    
    byte[] bytes = stream.ToArray();
    

    【讨论】:

    • 谢谢,我最后会用这个解决方案:)
    • 大多数变量名都有 6 个字母,但也有少数没有。我的强迫症开始发作了,我几乎想要修复它们......
    【解决方案2】:

    试试BinaryWriter 类:

    using (var binaryWriter = new BinaryWriter(...))
    {
        binaryWriter.Write(323);
        binaryWriter.Write(3487d);
        binaryWriter.Write("Hello");
    }
    

    【讨论】:

    • 我们都喜欢写三件事,包括你好。
    • 谢谢你,这正是我想要的:)。但是,使用二进制写入器后如何返回字节数组?
    • 如果二进制写入器包裹在MemoryStream上,您可以在其上调用ToArray并获得一个字节数组。
    • 我觉得问另一个问题完全愚蠢,但是,我如何将它包装在 MemoryStream 周围?
    • Lazlo,你可以看到我关于如何“将它包裹在内存流中”的答案(我觉得它不是我编辑 Kent 的地方)。
    【解决方案3】:

    您会想要使用BitConverter 类。主要区别在于这些方法返回一个字节数组,而不是更改现有数组。

    (这是对提到的具体方法的替换;关于整个ByteBuffer类的替换,请参见其他回复。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      相关资源
      最近更新 更多