【问题标题】:Convert from hexadecimal to float从十六进制转换为浮点数
【发布时间】:2013-07-25 14:43:47
【问题描述】:

我有一个字符串数组,其中包含十六进制值。我想将其转换为浮点数组。我尝试了下面的代码,但它没有给我正确的结果:

bufferArray 是包含十六进制值的字符串数组。

float[] dblBffrArry = new float[bufferArray.Length];

for (int i = 0; i < bufferArray.Length; i++)
{
    long parsed = long.Parse(bufferArray[i], NumberStyles.AllowHexSpecifier);
    dblBffrArry[i] = parsed;
}

你能指出另一种方法吗?

【问题讨论】:

  • 我相信这个问题已经得到解答。你介意检查this吗。我希望它有所帮助。
  • 感谢您的评论。在该示例中,他/她使用 BitConverter.GetBytes() 的十六进制参数。有没有办法将此方法与字符串参数一起使用?
  • 您当前的方法有什么问题?字符串使用什么编码?它们有多长?
  • 使用@MechanicalObject 建议的方法。使用ulong.Parse 将字符串解析为ulong,然后将该值传递给BitConverter.GetBytes,如链接问题所示。
  • @user1529034 我添加了你所问的作为答案,因为 cmets 是有限的。在您有空时提供您的反馈。

标签: c# floating-point hex


【解决方案1】:

可能是这样的:

float[] floatBffrArry = bufferArray.Select(s => Convert.ToInt64(s, 16))
    .Select(i => (float)i).ToArray();

编辑:

对您所问问题的不同解释是:

float[] floatBffrArry6 = bufferArray.Select(s => Convert.ToUInt64(s, 16))
    .Select(i => BitConverter.ToSingle(BitConverter.GetBytes(i), 0)).ToArray();

如果不提供输入和输出示例,就很难确切知道自己想要什么。

对于这两个例子,当然真的没有必要紧跟着.Select;如果我们将一个 lambda 箭头 =&gt; 替换为另一个,我们可以使用一个 .Select

【讨论】:

    【解决方案2】:

    写作为答案,因为它需要一些空间。

    Jeppe Stig Nielsen 的答案是正确的,并且比这里提出的更紧凑。

    以下内容对您有何帮助:

        var bufferArray = new string[] {"43480170", "41CA0000" };
    
        float[] dblBffrArry = new float[bufferArray.Length];
    
        for (int i = 0; i < bufferArray.Length; i++)
        {
            uint parsed = uint.Parse(bufferArray[i], NumberStyles.AllowHexSpecifier);
            // following two lines are the missing steps in your loop
            byte[] byteArray = BitConverter.GetBytes(parsed);
            float floatValue = BitConverter.ToSingle(byteArray, 0);
            // ---- 
            dblBffrArry[i] = floatValue;
        }
    
        foreach (var floatValue in dblBffrArry)
        {
            Console.Write("{0}-",floatValue);
        }
    

    希望对你有帮助。

    [编辑 - 固定链接] PS:我修改了on this MSDN link所示的解决方案。

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 2010-12-08
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      相关资源
      最近更新 更多