c # как конвертировать float в int - PullRequest
3 голосов
/ 24 августа 2011

Мне нужно преобразовать float в int (одинарная точность, 32 бита), например:
'float: 2 (hex: 40000000) в int: 1073741824'.Любая идея, как это реализовать?
Я искал в справке msdn, но безрезультатно.

Ответы [ 4 ]

8 голосов
/ 24 августа 2011
float f = ...;
int i = BitConverter.ToInt32(BitConverter.GetBytes(f), 0);
3 голосов
/ 24 августа 2011

BitConverter.DoubleToInt64Bits согласно принятому ответу на этот вопрос .

Если вышеуказанное решение не подходит для вас (из-за того, что оно действует на double / Double, а не float / Single), тогда см. Ответ Дэвида Хеффернана .

1 голос
/ 06 августа 2013

Дэвид СПАСИБО, это был короткий ответ на мой долгий поиск аналога для метода Java: Float.floatToIntBits. Вот весь код:

static void Main()
{

    float tempVar = -27.25f;

    int intBits = BitConverter.ToInt32(BitConverter.GetBytes(tempVar), 0);
    string input = Convert.ToString(intBits, 2);
    input = input.PadLeft(32, '0');
    string sign = input.Substring(0, 1);
    string exponent = input.Substring(1, 8);
    string mantissa = input.Substring(9, 23);

    Console.WriteLine();
    Console.WriteLine("Sign = {0}", sign);
    Console.WriteLine("Exponent = {0}", exponent);
    Console.WriteLine("Mantissa = {0}", mantissa);
}
0 голосов
/ 24 августа 2011

Если вы стремитесь к версиям ниже .Net 4, где BitConverter недоступен, или вы хотите преобразовать числа с плавающей запятой в 32-битные, используйте поток памяти:

using System;
using System.IO;

namespace Stream
{
  class Program
  {
    static void Main (string [] args)
    {
      float
        f = 1;

      int
        i;

      MemoryStream
        s = new MemoryStream ();

      BinaryWriter
        w = new BinaryWriter (s);

      w.Write (f);

      s.Position = 0;

      BinaryReader
        r = new BinaryReader (s);

      i = r.ReadInt32 ();

      s.Close ();

      Console.WriteLine ("Float " + f + " = int " + i);
    }
  }
}

Это немного долгоСмотрится.

...