从十六进制转换为浮点数
本文关键字:浮点数 转换 十六进制 | 更新日期: 2023-09-27 18:25:05
我有一个字符串数组,里面有十六进制值。我想将其转换为浮点数组。我尝试了下面的代码,但它没有给我正确的结果:
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;
}
你能指出另一种方法吗?
也许是这样的:
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 箭头=>
替换到另一个 lambda 箭头中,我们可以用一个.Select
来做。
写作为答案,因为它需要一些空间。
杰普·斯蒂格·尼尔森的回答是正确的,比这里提出的更紧凑。
以下内容将如何为您工作:
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链接上指示的解决方案。