2013-07-25 107 views
-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; 
} 

你可以指出另一種方式嗎?

+0

我相信這已經被回答了。你會介意檢查[this](http://stackoverflow.com/a/7903183/1991801)了。我希望它有幫助。 –

+0

感謝您的評論。在那個例子中,他/她使用BitConverter.GetBytes()的十六進制參數。有沒有辦法使用這個方法與字符串paramaeter? – MilesDyson

+1

你目前的方法有什麼問題?什麼編碼用於字符串?他們多久了? –

回答

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來做。

+0

+1我認爲第二個是OP正在尋找的東西。 –

0

寫作答案,因爲它需要一些空間。

傑普斯蒂格尼爾森的答案是正確的,比這裏提出的更緊湊。

如何爲以下會爲你工作:

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的解決方案。其中,編號爲on this MSDN link