首页 > 解决方案 > 检查十六进制数的条件

问题描述

我在文本文件中写入了一个十六进制数字。我需要检查 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#

解决方案


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

在此处输入图像描述

如果您想对您的数字执行一些数学运算,您需要先将它们转换为正确的数据类型(在您的情况下 - 整数)。

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

if (Convert.ToInt32(data["Start"], 16) == Convert.ToInt32(data["End"], 16) + 1)

或者

if (int.Parse(data["Start"], NumberStyles.HexNumber) == int.Parse(data["End"], NumberStyles.HexNumber) + 1)

他们会将包含十六进制数字的字符串转换为该数字的十进制表示,然后它将表现为数字(例如,加法将按预期工作)。


推荐阅读