-2

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

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

你能指出另一种方法吗?

4

2 回答 2

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紧随其后。.Select如果我们将一个 lambda 箭头替换为另一个,我们可以使用一个=>

于 2013-07-25T14:51:31.620 回答
1

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

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:我改编了此 MSDN 链接上指示的解决方案。

于 2013-07-25T16:01:31.507 回答