如何将00-00格式的十六进制转换为double?

时间:2016-03-24 09:02:33

标签: c# hex double

我的格式是00-C6(Hex)。当我尝试将其转换为double(格式化execption)时,它会抱怨。怎么办?

    public void check()
    {
        double low;
        double high;
        percentageCalculator(4095, 5, out low, out high);
        Dictionary[] A_1 = {Max_1, Min_1};

        for (int i = 0; i < A_1.Length; i++)
        {
            if ((Convert.ToDouble(A_1[i].CurrentValue) <= low) || ((Convert.ToDouble(A_1[i].CurrentValue) >= high))
            {
                Fault++;
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

假设Hex 00-C6 string代表Integer值(因为它代表floating-pointfloatdouble ,它必须包含4-byte8-byte),然后处理它的一种方法是拆分Hex string

string hexString = "00-C6";
string[] hexes = hexString.Split('-');

然后你像这样处理hexes中的每个元素:

int hex0 = Convert.ToInt32(hexes[0], 16);
int hex1 = Convert.ToInt32(hexes[1], 16);

如果十六进制是小端,那么您的double值将为:

double d = hex0 << 8 + hex1;

如果它是大结局,那么您的double将是:

double d = hex1 << 8 + hex0;

这里的关键是要知道你可以使用Int将十六进制字符串表示转换为Convert.ToInt32,第二个参数为16

如果您愿意,可以将上述所有步骤合并到一个衬垫中。在这里,为了清晰起见,我故意将它们分解。

答案 1 :(得分:1)

看一下这段代码:

        string hexnumber = "00-c6";
        double doubleValue = (double)Convert.ToInt32(hexnumber.Replace("-", ""), 16);