C# 十六进制数的检查条件

C# 十六进制数的检查条件,c#,C#,我在文本文件中写了一个十六进制数。我需要在if-else中检查十六进制数的条件。例如,写入文本文件的起始编号为1100,结束编号为10FF。起始编号1100是结束编号与1的相加。此增量过程由其他系统完成 在我的例子中,在读取文本文件中的数字后,系统将进入下一个进程 这是我的代码: var data = File .ReadAllLines(Path) .Select(x => x.Split('='))

我在文本文件中写了一个十六进制数。我需要在if-else中检查十六进制数的条件。例如,写入文本文件的起始编号为1100,结束编号为10FF。起始编号1100是结束编号与1的相加。此增量过程由其他系统完成

在我的例子中,在读取文本文件中的数字后,系统将进入下一个进程

这是我的代码:

var data = File                 
.ReadAllLines(Path)                
.Select(x => x.Split('='))                 
.Where(x => x.Length > 1)                
.ToDictionary(x => x[0].Trim(), x => x[1]);       
    
Console.WriteLine("Start: {0}", data["Start"]);      
Console.WriteLine("End: {0}", data["End"]);      
    
if (data["Start"] == data["End"]+1)     
{    
      //it will proceed to next process     
}     
else     
{    
    //prompt not meet end number    
}   
问题是,
if(data[“Start”]==data[“End”]+1)
不起作用。我如何解决这个问题?是否需要先将十六进制数转换为int?

在C#中,如果将字符串与数字串联,数字将转换为字符串并附加到原始字符串的末尾:

如果要对数字执行一些数学运算,首先需要将它们转换为正确的数据类型(在本例中为-integer)

为此,可以使用以下命令之一:

if(Convert.ToInt32(数据[“开始”],16)=Convert.ToInt32(数据[“结束”],16)+1)

if(int.Parse(数据[“开始”]、NumberStyles.HexNumber)==int.Parse(数据[“结束”]、NumberStyles.HexNumber)+1)
它们会将包含十六进制数的字符串转换为该数字的十进制表示形式,然后它将作为一个数字(例如,加法将按预期工作)。

“10FF”
不是
0x10FF

在c#中,字符串恰好包含可以解析为十六进制数字(或任何数字)的文本,这并不意味着它将被隐式转换为该数字。
事实上,另一种方法是在字符串和数字之间使用
+
运算符时-c将数字隐式转换为字符串-因此
“10FF”+1
将产生
“10FF1”

请注意,我在这一行中以“In c#”开头,因为其他语言可能不遵循相同的规则。例如,在T-SQL中,从varchar到int的隐式转换一直在发生,对于没有经验的开发人员来说,这是一个非常常见的“问题”

因此,您需要将字符串转换为整数,正如Lasse V.Karlsen在评论中所写的那样。 您可以使用
Convert.ToInt32(string,16)
或者使用
int.Parse(str,NumberStyles.HexNumber)
——如果您确定文本始终包含十六进制数的字符串表示形式


对于不确定的文本,最好使用
int.TryParse
以避免出现
FormatException
——但请注意
TryParse
返回
bool
,int值通过
out
参数返回:
int.TryParse(str,NumberStyles.HexNumber,CultureInfo.InvariantCulture,out var val)

首先尝试将字符串转换回整数,使用
Convert.ToInt32(data[“Start]”,16)
。尝试在中间窗口中运行
“10FF”+1
。很高兴提供帮助:-)