gpt4 book ai didi

c# - 将指针转换为 float

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:37 27 4
gpt4 key购买 nike

我已经搜索过,但找不到适合我的问题的答案我希望有人能帮助我。我有一些函数可以将 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);
}

对于每种类型,我还有一个读取函数,可以从缓冲区中读回值。偏移量是我们在上次读取后停止的位置。

    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 函数总是返回错误的值。

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

08 00 01 01 00 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);

}
}
}

关于c# - 将指针转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31553119/

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