-2

16 進数値を含む文字列配列があります。float配列に変換したい。以下のコードを試しましたが、正しい結果が得られません。

bufferArray16 進値を含む文字列配列です。

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

スペースが必要なため、回答として書き込みます。

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 に答える
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両方の例について、もちろん、お互いの直後にする必要はまったくありません。.Select1 つのラムダ矢印を別のラムダ矢印に置き換えれば、1 つを使用できます=>

于 2013-07-25T14:51:31.620 に答える