尝试取十进制值并将其转换为十六进制。这是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。有人可以帮忙吗?
答案 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();
}
}