首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中十六进制的浮点数

C#中十六进制的浮点数
EN

Stack Overflow用户
提问于 2014-09-24 15:58:24
回答 2查看 5.4K关注 0票数 4

我在谷歌上发现,关于如何将数字转换为十六进制浮点单精度,“切中要害”的信息并不多。有三个明确的步骤:1转换整个二进制部分。2添加逗号并将小数部分转换为二进制。3将结果放在科学报告中。4将结果传递给IEEE-754标准32位。这将导致二进制。然后将其转换为十六进制。这一切都很糟糕,我把代码放在这里,希望它能为我解决这个问题;-)问候你。

代码语言:javascript
复制
      private String Float2Hex(String value) {
        String[] aux;
        String number = "", mantissa = "", exponent = "";
        Double div = 0;
        int exp = 0;
        aux = value.Split('.');
        number = Convert.ToString(int.Parse(aux[0]), 2);
        exp = number.Length - 1;

        mantissa = number.Substring(1, number.Length - 1);

        while ((aux.Length > 1) && (mantissa.Length < 23)) {
            div = Double.Parse("0," + aux[1]) * 2;
            aux = div.ToString().Split(',');
            mantissa += aux[0];
        }

        while (mantissa.Length < 23)    // Simple precision = 23 bits
            mantissa += "0";

        exponent = Convert.ToString(exp + 127, 2);

        if (value.Substring(0, 1).Equals("-"))
            number = "1" + exponent + mantissa;
        else
            number = "0" + exponent + mantissa;

        return Bin2Hex(number);
    }

我使用另一个合作伙伴的以下Bin2Hex函数:Binary to Hexadecimal

EN

回答 2

Stack Overflow用户

发布于 2014-09-24 19:42:22

另一个例子:

代码语言:javascript
复制
        String value = "", tmp = "";

        val = float.Parse(StringValue);

        byte[] b = BitConverter.GetBytes(val);
        StringBuilder sb = new StringBuilder();

        foreach (byte by in b)
            sb.Append(by.ToString("X2"));

        return sb.ToString();            
票数 3
EN

Stack Overflow用户

发布于 2014-09-24 16:50:46

你能不能不使用流来写浮点值?

代码语言:javascript
复制
string a = Float2Hex(4.5f);

函数

代码语言:javascript
复制
public string Float2Hex(float fNum)
{
    MemoryStream ms = new MemoryStream(sizeof(float));
    StreamWriter sw = new StreamWriter(ms);

    // Write the float to the stream
    sw.Write(fNum);
    sw.Flush();

    // Re-read the stream
    ms.Seek(0, SeekOrigin.Begin);
    byte[] buffer = new byte[4];
    ms.Read(buffer, 0, 4);

    // Convert the buffer to Hex
    StringBuilder sb = new StringBuilder();
    foreach (byte b in buffer)
        sb.AppendFormat("{0:X2}", b);

    sw.Close();

    return sb.ToString();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26011546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档