Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将指针投射到浮子上_C#_Pointers_Casting - Fatal编程技术网

C# 将指针投射到浮子上

C# 将指针投射到浮子上,c#,pointers,casting,C#,Pointers,Casting,我已经搜索过了,但是我找不到一个很好的答案,我希望有人能帮助我。 我有一些函数将c#变量写入偏移位置的缓冲区。我有一个类似下面的函数。这个WriteFloat函数可以正常工作,并且可以正确获取所有字节 public unsafe void WriteFloat(float v, byte[] m_Buffer,int m_Offset ) { ValidateBufferSize(sizeof(float)); fixed ( byte* buf

我已经搜索过了,但是我找不到一个很好的答案,我希望有人能帮助我。 我有一些函数将c#变量写入偏移位置的缓冲区。我有一个类似下面的函数。这个WriteFloat函数可以正常工作,并且可以正确获取所有字节

    public unsafe void WriteFloat(float v, byte[] m_Buffer,int m_Offset )
    {
        ValidateBufferSize(sizeof(float));

        fixed ( byte* buf = m_Buffer )
            *(float*)(buf + m_Offset) = v;

        m_Offset += sizeof(float);
    }
对于每种类型,我都有一个read函数,可以从缓冲区读回值。偏移量是上次读取后我们停止的位置

    public unsafe float ReadFloat( byte[] m_Buffer,int m_Offset)
    {
        fixed (byte* buf = m_Buffer)
        {
            float v = *((float*)(buf + m_Offset));
            m_Offset += sizeof(float);
            return v;
        }

    }
问题就在这里。float是我目前唯一不支持的变量,因为我的ReadFloat函数总是返回错误的值

例:这是我们写入缓冲区后的缓冲区(注意:不要介意前4个字节),最后4个字节是短的5.5f=00 00 b0 40

08 00 01 01 00 b0 40

当我在缓冲区上使用readFloat函数时,它总是返回0

有什么我做错了吗?

用正确的方法做

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            float  input = 123.45F;
            byte[] array = new byte[4];
            WriteFloat(input, ref array, 0);
            float output = ReadFloat(array, 0);
        }
        static public void WriteFloat(float v, ref byte[] m_Buffer, int m_Offset)
        {
            BitConverter.GetBytes(v).CopyTo(m_Buffer, m_Offset);
        }
        static public float ReadFloat(byte[] m_Buffer, int m_Offset)
        {
            return BitConverter.ToSingle(m_Buffer, m_Offset);

        }
    }
}
​