在C#脚本中将Dec转换为Hex

时间:2013-02-19 14:38:17

标签: hex type-conversion decimal

尝试取十进制值并将其转换为十六进制。这是SCADA程序中的C#脚本。以下将Hex转换为Dec恰好:

using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;

public partial class ФБ : ScriptBase
{
    public override void Execute()
    {
    string hexValue = InVal;
    int num = Int32.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
    OutVal = num;   
    }
}

但我遇到了相反的问题 - 当我尝试将Dec转换为Hex时。根据我的理解,以下内容应该有效,但是它会给出错误:方法'ToString'的重载没有在第12行中使用'1'参数

11    int? decValue = InVal;
12        string hexValue = decValue.ToString("X");
13        //string hexValue = string.Format("{0:F0}", decValue);
14        uint num = uint.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
15        OutVal = num;

我可以通过使用第13行而不是12来避免错误,但在这种情况下,我将Hex转换为Dec而不是Dec转换为Hex。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

您尝试在ToString(string)值上调用int?Nullable<T>没有ToString(string)超载。你需要这样的东西:

string hexValue = decValue == null ? "" : decValue.Value.ToString("X");

(如果decValue为空,显然会根据您想要的结果调整上述内容。)

答案 1 :(得分:0)

试试decValue.Value.ToString("X"); 您的类型为int?而不是int

答案 2 :(得分:0)

这是我的功能:

using System;
using System.Collections.Generic;
class DecimalToHexadecimal
{

    static string DecToHex(decimal decim)
    {
        string result = String.Empty;

        decimal dec = decim;

        while (dec >= 1)
        {
            var remainer = dec % 16;
            dec /= 16;
            result = ((int)remainer).ToString("X") + result;
        }

        return result;
    }

    static void Main()
    {
        Console.WriteLine("Enter decimal");
        decimal dec = decimal.Parse(Console.ReadLine());
        Console.WriteLine("Hexadecimal representation to {0} is {1}", dec, DecToHex(dec));

        Console.ReadKey();
    }
}