2015-07-22 3 views
2

Я искал, но не могу найти хороший ответ для своей проблемы. Надеюсь, кто-то может мне помочь. У меня есть некоторые функции, которые записывают переменную 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;

Есть ли что-то, что я делаю неправильно?

ответ

1

ли это правильный путь

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); 

     } 
    } 
} 
​ 
Смежные вопросы